复习C++之《深入浅出MFC》第二章

①设定静态数据成员初始化时,不受任何存取权限的束缚。

②每个类中,不论有多少个虚函数,都只有一个vptr指向虚函数表。

③类的定义也存在内存对齐问题,且sizeof不计入static变量。

#include<iostream> using namespace std; class A { private: char ch1; char ch2; int a; static double dd; }; class B { private: char ch1; int a; char ch2; static double dd; static double ddd; }; int main() { A a; B b ; cout << "sizeof (a ) = " << sizeof( a ) << "\n" << "sizeof( b)= " << sizeof( b ) << endl; return 0; }以上运行答案是:sizeof ( a ) = 8 sizeof( b ) = 12;

4)构造函数与析构函数

#include<iostream> #include<string.h> using namespace std; class CDemo { public: CDemo( const char * str); ~CDemo(); private: char name[20]; }; CDemo::CDemo(const char * str) { strncpy( name , str, 20); cout << "Constructor called for " << name << endl; } CDemo::~CDemo() { cout << "Destructor called of " << name << endl; } void func() { CDemo LocalObjectInFunc( "LocalObjectInFunc"); static CDemo StaticObject( "StaticObject"); CDemo *pHeapObjectInFunc = new CDemo( "HeapObjectInFunc"); cout << "Inside func" << endl; } CDemo GlobalObject( "GlobalObject"); void main() { CDemo LocalObjectInMain("LocalObjectInMain"); CDemo* pHeapObjectInMain = new CDemo("HeapObjectInMain"); cout << "In main , before calling func"<< endl; func(); cout << " In main, after calling func" << endl; }


有几点需要注意的地方:

1.全局对象的构造函数最先执行,比程序进入点更早,且其析构函数在程序即将结束前执行。

2.对于局部对象,当对象诞生时,其构造函数被执行,当程序流程即将离开该对象的活动范围时,其析构函数给执行

3.对于静态对象,当对象诞生时其构造函数被执行,当程序将结束时,其析构函数被执行。但比全局对象的析构函数更早一步。

4.对于以New方式产生出来的局部对象,当对象诞生时其构造函数被执行,析构函数则在对象被delete时执行。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值