資源簡(jiǎn)介
1. 虛函數(shù)是可以[New一個(gè)對(duì)象的時(shí)候要根據(jù)虛函數(shù)的函數(shù)體來填虛表;而內(nèi)聯(lián)函數(shù)沒有函數(shù)體,只是在預(yù)編譯階段展開]內(nèi)聯(lián)的,這樣就可以減少函數(shù)調(diào)用的開銷,提高效率(錯(cuò)誤)
2. 一個(gè)類里可以同時(shí)存在[同一個(gè)類里無論什么函數(shù)都不能函數(shù)名和參數(shù)完全一樣]參數(shù)和函數(shù)名都相同的虛函數(shù)與靜態(tài)函數(shù)(錯(cuò)誤)
3. 父類的析構(gòu)函數(shù)是非虛的,但是子類的析構(gòu)函數(shù)是虛的,delete子類指針(指向該子類對(duì)象)[特殊情況,參見題5],會(huì)調(diào)用父類的析構(gòu)函數(shù)(正確)//任何情況下刪除子類都會(huì)調(diào)用到父類的析構(gòu)函數(shù)
4.對(duì)于下面的類CA,sizeof(CA) = _B_:
A. 4 B. 8 C. 12 D. 16
class CA
{
public:
CA();
virtual ~CA(); //因?yàn)橛刑摵瘮?shù),所以會(huì)有4個(gè)字節(jié)的虛表指針
private:
int m_iTime; //成員變量4個(gè)字節(jié)
public:
int GetTime();
int SetTime(int iTime);
};
5.下面這段程序,打印結(jié)果是_A_:
A. 1 B. 2 C. 3 D. 以上都不對(duì)
int g_iCount = 0;
class CParent
{
public:
CParent() {}
~CParent() {g_iCount += 1;}
};
class CSon : public CParent
{
public:
CSon() {}
~CSon() {g_iCount += 2;}
};
main()
{
CParent* p = new CSon();
delete p[由于p被聲明成父類指針,并且父類和子類的析構(gòu)函數(shù)都非虛,因此delete操作只能根據(jù)p指針聲明的類型來調(diào)用父類的析構(gòu)函數(shù)];
std::cout << g_iCount << std::endl;
}
6.請(qǐng)問下面這段程序的輸出結(jié)果是_A_:
A. 2,1, B. 2,2, C. 1,1, D. 1,2,
class CParent
{
public:
CParent() {}
virtual ~CParent() {}
public:
virtual void Print()
{ std::cout << "1,"; };
};
class CSon : public CParent
{
public:
CSon() {};
virtual ~CSon() {};
public:
void Print()
{ std::cout << "2,"; };
};
void Test1(CParent& oParent[這里是引用了一個(gè)外部對(duì)象,該對(duì)象的虛表不會(huì)發(fā)生變化])
{oParent.Print();}
void Test2(CParent oParent[這里會(huì)在棧空間內(nèi)重新構(gòu)造一個(gè)CParent類的對(duì)象,如果傳入實(shí)參的類型與CParent不同則虛表會(huì)發(fā)生變化])
{oParent.Print();}
main()
{
CSon * p = new CSon();
Test1(*p); //這里只是一個(gè)引用
Test2(*p); //這里會(huì)在棧空間重新構(gòu)造Cparent類對(duì)象
delete p;
}
7.請(qǐng)問下面這段程序的輸出結(jié)果是_D_:
A. 2,1, B. 2,2, C. 1,1, D. 1,2,
class CParent
{
public:
CParent() {}
virtual ~CParent() {}
public:
void Print(){ std::cout << "1," ; };
};
class CSon : public CParent
{
public:
CSon() {}
virtual ~CSon() {}
public:
void Print(){ std::cout <Print();
pSon->Print();[由于父類和子類的Print函數(shù)都非虛,所以根據(jù)指針類型決定調(diào)用關(guān)系]
}
8.請(qǐng)問下面這段程序的輸出結(jié)果是_C_:
A. 2,1, B. 2,2, C. 1,2, D. 1,1,
class CP
代碼片段和文件信息
評(píng)論
共有 條評(píng)論