首页 > 试题广场 >

(C++部分)c++定义一个空的类CTest,CTest没有

[不定项选择题]
(C++部分)c++定义一个空的类CTest,CTest没有定义任何成员变量和成员函数,在32位机器上,以下结论正确的有: 
  • 对该类求sizeof,结果为0。
  • 给CTest添加构造函数,再对CTest求sizeof,结果为1.
  • 给CTest添加虚函数,再对CTest求sizeof,结果为4.
  • 给CTest添加虚函数,再对CTest求sizeof,结果为5.
发表于 2020-08-27 15:00:41 回复(0)
/*
https://ac.nowcoder.com/questionTerminal/61292be7140043609abfdd5e9624cca4?orderByHotValue=1&page=1&onlyReference=false
*/
#include<bits/stdc++.h>
using namespace std;
class A{//空类
};
class A1{//虚函数
	virtual void fun(){}
};
class A2{//静态成员和普通函数
	static int a(){}
	int b(){}
};
void test00(){
	/*
	空类的大小是1,在C++中空类会占用1个字节,这是为了让对象的实例能够相互区别。具体来说,空类同样可以被实例化
,并且每个实例在内存中都有独一无二的地址,因此,编译器会给空类隐含加上一个字节,这样空类实例化后就会拥有独一无二
的内存地址。当该空白类作为基类时,该类的大小就优化为零了,子类的大小就是子类本身的大小。这就是所谓的空白基类最优化。
空类的实例大小就是类的大小,所以sizeof(a)=1字节,如果a是指针,则sizeof(a)就是指针的大小
	*/
	cout<<sizeof(A)<<endl;
	A a;
	cout<<sizeof(a)<<endl;
	A*pa;
	cout<<sizeof(pa)<<endl;
}
void test01(){
	/*
	对于虚函数,在64位机器上为8,因为有虚函数的类对象中都有一个虚函数表指针,其大小是8字节
	*/
	cout<<sizeof(A1)<<endl;
	A1 a;
	cout<<sizeof(a)<<endl;
	A1*pa;
	cout<<sizeof(pa)<<endl;
}
void test02(){
	/*
	静态成员存放在静态存储区,不占用类的大小,普通函数也不占用类的大小
	*/
	cout<<sizeof(A2)<<endl;
	A2 a;
	cout<<sizeof(a)<<endl;
	A2*pa;
	cout<<sizeof(pa)<<endl;
}
int main(){
	test02();
	system("pause");
	return 0;
}

发表于 2021-06-18 16:20:19 回复(1)
普通函数不占用类空间
发表于 2022-07-11 01:46:55 回复(0)