标签:c++编程语言
今天开始看effective C++了,感觉写的不错,特此用自己的语言记录一下加深印象~
1.得了解C++编译器会默认编写并调用哪些函数
//当声明一个空类时,编译器会为这个类默默编写4个函数并调用他们以便实现类的功能 class A { }; //在编译器的支持下,上面这个空类等价于下面这个类 class A { public: A(){}; //default构造函数 A(const A&){}; //拷贝构造函数 A& operator=(const A&){}; //拷贝赋值操作符 ~A(){}; //析构函数 };
class A { public: int a; }; class B : public A { public: int b; }; A* p=new A; p=new B; //从上面两个类来看,分配给类A的实例的内存占4个字节(32bit),而分配给类B的实例的内存占8个字节 //那么让p指向一个类B的实例后,指针p只能访问继承来的前四个字节 B* p2=new B; p2=new A; //上面这么做的结果就是未定义
#include <iostream> using namespace std; class A { public: A(){cout<<"A constructor"<<endl;}; ~A(){cout<<"A destructor"<<endl;}; virtual void fun(){cout<<"A"<<endl;}; //virtual ~A(){cout<<"A destructor"<<endl;}; }; class B : public A { public: B(){cout<<"B constructor"<<endl;}; ~B(){cout<<"B constructor"<<endl;}; void fun(){cout<<"B"<<endl;}; }; int main() { A* p=new B; p->fun(); delete p; //会出现未定义行为,必须给A类加上一个虚析构函数 return 0; }
Effective C++(1)------------------------------构造/析构/赋值
标签:c++编程语言
原文地址:http://blog.csdn.net/liusuangeng/article/details/45397433