class classWithNoVirtualFunction
{
public:
int a;
void x()
{
char c;
c = 'a';
}
};
class classWithOneVirtualFunction
{
public:
int a;
virtual void x() {}
};
class classWithTwoVirtualFunctions
{
public:
int a;
virtual void x() {}
virtual void y() {}
};
int main()
{
cout << "\nclassWithNoVirtualFunction's size: " << sizeof (classWithNoVirtualFunction);
cout << "\nclassWithOneVirtualFunction's size: " << sizeof (classWithOneVirtualFunction);
cout << "\nclassWithTwoVirtualFunctions's size: " << sizeof (classWithTwoVirtualFunctions);
cout << "\nvoid*'s size : " << sizeof (void*);
}
W.R.T上面的代碼,在C++思考說:爲什麼只有虛擬功能纔會影響課堂的規模?
該實施例所需的至少一個數據成員。如果沒有 數據成員,則C++編譯器將強制將對象設置爲非零大小,因爲每個對象都必須具有不同的地址。如果你想象索引到一個零大小的對象數組中,你將會理解 。將一個「虛擬」成員插入對象中,否則該對象將爲零。
我的問題:現在,我無法理解什麼& &如何到底會發生,如果我們有任何成員和虛擬函數的類。請用一些編程示例來解釋。
我不明白這是怎麼解釋的*編程示例*超出你已經添加(刪除'int')。順便說一句,該程序的預期輸出將是(1,x,x,x),其中x是體系結構中指針的大小(對於32/64位體系結構,通常爲4/8)。 –
@DavidRodríguez-dribeas嚴格地說,沒有要求第一個輸出是1,只是它不是0.在一個尋址的機器上(Unisys主機),我希望它是一個字的大小,並且所有值是相同的。嚴格地說,也沒有要求剩餘值也是相同的;我在硬件上使用了一個'void *'大於'vptr'所需的硬件。 (但那是在C++的日子之前;我不認爲任何這樣的野獸仍然存在。) –