一个空类默认大小为1,如果有虚函数,因为虚函数表与指针的存在,所以在32位机器上,一个类的大小为4。
class EmptyCppClass{ public: EmptyCppClass(); // 缺省构造函数 EmptyCppClass( const EmptyCppClass& ); // 拷贝构造函数 ~EmptyCppClass(); // 析构函数 EmptyCppClass& Operator=( const EmptyCppClass& ); // 赋值运算符 EmptyCppClass* operator&(); // 取址运算符 const EmptyCppClass* operator&() const; // 取址运算符 const};优点:提升运行效率,缺点:使二进制文件变得很大。
不可以: - 虚函数肯定不会被内联这一点毋庸置疑,因为虚函数只有到了runtime才能被识别到底是哪一个被调用,而内联是编译器就会将代码展开并安插,这个明显不是一回事。 - inline有两种表现方式,一种就是一inline在实现文件中(.cpp)指出,这个被称为显示内联,另外一种将函数声明和定义放入同一个文件,这种称为隐式内联,但是还是如前面所说,inline只是一个提示符,至于会不会内联还是由编译器说了算。
虚函数一个Virtual就够了,但是纯虚函数还得=0做标识,另外,纯虚函数在子类中必须实现,虚函数没这个说法。
int i;float f; f=(float)i;
或者f=static_cast<float>(i);
const_cast 用于取出const属性,把const类型的指针变为非const类型的指针,如:const int *fun(int x,int y){} int *ptr=const_cast<int *>(fun(2.3))
dynamic_cast 该操作符用于运行时检查该转换是否类型安全,但只在多态类型时合法,即该类至少具有一个虚拟方法。dynamic_cast与static_cast具有相同的基本语法,dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。reinterPRet_cast interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);
这个转换方式很少使用。const int *p;
// const修饰的是*p,因此*p是常量不能改变,但可以改变p的指向;int const* p;
// 同上,主要是看const与*的前后关系;int* const p;
// const修饰的是p,因此p的指向是常量不能改变,但*p可以改变;const int const *p;
// 两个const既修饰了*p也修饰了p,因此*p与p都是常量不能改变;malloc, free是操作符,只能对内置类型进行分配,new,delete是函数,可以对自定义类型进行内存分配,new的调用会调用构造函数,malloc则没有。
类成员默认为private,struct默认为public;
C++类可以有自身类型的对象,但是不是简单的直接定义对象,它可以定义静态的自身类型对象或者是自身类型的指针。
析构函数可以为虚函数,而且应该标为虚函数,这是为了防止析构函数在析构父类的时候没有析构子类,这样会造成内存泄漏。而默认的析构函数不是虚函数。
构造函数绝对不能为虚函数,因为构造函数的调用必须要确定构造出的类,这个是在编译器决定的,虚函数是在运行时决定的,所以不可以。
参考这里:http://zhedahht.blog.163.com/blog/static/25411174200793181548842/
当然可以私有,只不过private以后就不能再进行拷贝了。
这是为了防止循环调用构造函数,造成死循环。
一般来说不需要重写复制构造函数,除非默认的复制构造函数提供的浅拷贝不能满足需求了才重写。
类数据成员的初始化只要记住初始化顺序跟定义顺序是一致的就可以了。
可以是可以,但是得需要重写一个类似于析构函数的函数,只有这样才能正常地释放对象。
这个已经涉及到了C++03的标准,它规定赋值的左值是const,所以右值也应该是const。
因为静态周期生命周期要比其他对象要长,所以静态对象一定是在函数结束的最后被销毁的。
不可以,虚函数必须有对象操作,静态的话就跟对象没关系了,就这一点就矛盾了,所以虚函数不能为static。
新闻热点
疑难解答
图片精选