c++面试题总结
内联函数与宏定义的区别?
- 内联函数在执行是可调试,而宏定义不可以
- 编译器会对内联函数做类型检查 宏不可以
- 内联函数可以访问类的成员变量
- 在类中声明同时定义成员函数自动转换成内联函数
c++中一个空类会默认产生那些类成员函数?
#include<iostream>
using namespace std;
class Empty{
public:
Empty(); //默认构造函数
Empty(const Empty&); //默认拷贝构造函数
~Empty(); //默认析构函数
Empty&operator=(const Empty&); //默认赋值运算符
Empty*operator&(); //默认取址运算符
const Empty*operator&()const; //默认const取址运算
};
int main()
{
return 0;
}
下列代码中的输出语句输出0吗?为什么?
#include<iostream>
using namespace std;
struct CLS{
int m_i;
CLS(int i):m_i(i){}
CLS(){CLS(0);} //不会
//在默认构造函数内部调用带参数的构造函数是递归行为,
// 程序仅执行函数调用,而不执行其后的初期化,
// 只有生成对象时,初始化表达式才会随相应的构造函数一起调用
};
int main()
{
CLS obj;
cout<<obj.m_i<<endl;
return 0;
}
一个类A没有任何数据成员和成员函数时,sizeof(A)的值是什么?如果不是0,编译器为什莫没有让它为0.
sizeof(A)大小为1,因为类是是用来定义对像的,每个对象的存储空间中存储相应的数据成员值,通常第一个数据成员的地址为对象地址.如果长度为0,无法实例化空类的对象,为此编译器添加一个字节的数据成员.
为什么static数据成员一定要在类外初始化?
静态成员属于整个类,不属于某个对象,如果在类的内部定义,在建立多个对象时会导致多次定义,
静态数据成员的特点
静态数据成员属于类不属于对象,无论定义多少个对象,静态数据成员只存在一份
静态数据成员必须在类外进行初始化
静态数据成员存储在全局数据区,为本类的所有对象共享,不属于特定的类对象。