假如定义了一个类C:
class C{
public:
C(){}
C(int k){key=k;}
~C(){}
private:
int key;
}
现在声明类C的对象c1,c2,c3。
class C{
public:
C(){key=0;}
C(int k){key=k;}
~C(){}
void func(){cout<<"ok:"<<key<<endl;}
private:
int key;
};
void main(){
C c1;
c1.func();//1.ok
C *pc11=new C;
pc11->func();//2.ok
//C c2();
//c2.func();//3.error
C *pc12=new C();
pc12->func();//4.ok
C c3(2);
c3.func();//5.ok
C *pc2=new C(2);
pc2->func();/6./ok
delete pc11;
delete pc12;
delete pc2;
}
其中:第3种情况错误,编译器以为C c2()是在声明一个函数,所以在后面一条语句c2.func()处出错。
------构造函数和析构函数:
1.构造函数和析构函数均可以定义为inline函数,但尽量避免定义构造函数和析构函数为inline函数;
2.析构函数可以定义为virtual虚函数,但是构造函数不可以定义为虚函数,因为虚函数的实现机制是虚调用,在信息不完整的情况下完成对函数的调用,特别是在已知接口而不知道准确对象类型的函数,而构造函数实现对对象的构造,需要已知对象的类型;
3.构造函数和析构函数都不可以定义为静态static成员函数;此外,static成员函数不能声明为virtual或const类型。