①设定静态数据成员初始化时,不受任何存取权限的束缚。
②每个类中,不论有多少个虚函数,都只有一个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时执行。