上次面試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; }