第一題:以下程序的輸出是___________________
class Base
{
public:
Base(int j):i(j){}
virtual ~Base(){}
void func1(){i *= 10; func2();}
int getValue(){return i;}
protected:
virtual void func2(){i++;}
protected:
int i;
};
class Child:public Base
{
public:
Child(int j):Base(j){}
void func1(){i *= 100; func2();}
protected:
void func2(){i += 2;}
};
int main()
{
Base* pb = new Child(1);
pb->func1();
cout<<pb->getValue()<<endl;
delete pb;
return 0;
}
此題輸出:12.(在非虛函數中調用虛函數,將調用實際的虛函數)
第三題:以下程序的輸出是___________________
int main()
{
char num;
for(num = 0;num < 255;)
num += num;
cout<<num<<endl;
return 0;
}
此題是死循環,無輸出。(for循環中將num賦值為0了,在for循環上面是一個隨機的值。所以num+num還是0,此題說明無論在什麼情況下一定要堅持自己的判斷)。
第四題:程序出錯在什麼階段:
#include
using namespace std;
int main()
{
http://www.linuxidc.com
cout<<"welcome to linuxidc"<<endl;
return 0;
}
A:編譯時;B:運行時;C:編譯和運行時都出錯;D程序運行正常
選D。因為http://www.linuxidc.com中//後面是注釋,前面是標簽(類似goto的標簽)。(坑爹啊)
第五題:下面程序的執行結果是【說明:x86_64環境】(*間接訪問的優先級大於-)
int a[4][4] = {
{1,2,3,4},
{50,60,70,80},
{900,1000,1100,1200},
{13000,14000,15000,16000}
};
int (*p1)[4] = a;
int (*p2)[4] = &a[0];
int *p3 = &a[0][0];
cout<<*(*(a + 1) - 1)<<" "<<*(*(p1 + 3) - 2) + 1
<<" "<<*(*(p2 - 1) + 16) + 2<<" "
<<*(p3 + sizeof(p1) - 3)<<endl;
輸出結果為:4 1101 13002 2。
p1為指向一維數組的指針,所以a + 1指向{50,60,70,80}這一維的地址。減一則為4的地址;同理第二個輸出1101。同理,由於數組的列是4,所以*(p2 - 1) + 16就相當於*(p2) + 12,所以第三個輸出13002。
第四個由於p1是指針,所以sizeof(p1)為4,所以第四個輸出2。