C++面試總結

上次面試C++發現了很多本身還不會的問題,總結一番。 ios

一,宏函數 面試

好比定義一個求二者最大值的宏函數: 函數

#define MAX(a,b) ((a)>(b)?(a):(b)) spa

注意1,MAX後不能有空格。2,每一個變量最好用括號括起來。3,末尾不要加分號 指針

面試題:寫一個求整數a的第n位是1仍是0的宏函數 code

#define fun(a,n) ((a)&(1<<(n)) == (1<<(n)))?1:0 string

二,多態 it

要實現多態(動態綁定),必須知足如下之一
一、使用指針調用
二、使用引用調用
如: io

#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
 
class base {
public:
    virtual void print() {
        cout<<"it is in base::print"<<endl;
    }
    virtual ~base(){}
};
 
class son:public base {
public:
    virtual void print() {
        cout<<"it is in son::print"<<endl;
    }
    virtual ~son(){}
};
 
class grandson:public son {
public:
    virtual void print() {
        cout<<"it is in grandson::print"<<endl;
    }
    virtual ~grandson(){}
};
 
void fun(base arge) { //基類對print()的調用
    arge.print();
}
void func(base& arge) { //靜態多態
    arge.print();
}
 
void func_t(base* arge){ //動態多態
    arge->print();
}
 
int main() {
    base a;
    son b;
    grandson c;
    func_t(&a);//能體現多態
    func_t(&b);
    func_t(&c);
 
    base d;
    son e;
    grandson f;
    func(d); //能體現多態
    func(e);
    func(f);
    
    basw g;
    son h;
    grandson i;
    fun(g);//不體現多態,都是調用的base類的print方法
    fun(h);//同上
    fun(i)//同上
    return 0;
}
相關文章
相關標籤/搜索