构造函数

来源:互联网 发布:ubuntu 输入法 安装 编辑:程序博客网 时间:2024/06/05 18:15

1)构造函数与类同名。

除了名字外,构造函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。

如果它有返回值类型,那么编译器将不知所措。

----- 默认构造函数

     1.  假如我们不提供一个构造函数,系统会自动创建一个构造函数,该函数不带参数,也不执行任何功能,它的作用只是构造一个对象

     2.  一旦我们创建了一个构造函数,那么那个默认的构造函数就会被自动屏蔽,构造对象时会调用我们创建的这个。

     3.  我们可以创建多个构造函数,可以创建不带参数的,也可以创建带参数的,构造函数可以重载

2)静态构造函数

实现对一个类进行初始化的方法成员。它一般用于对静态数据的初始化

静态构造函数不能有参数不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。

注意静态构造函数只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化。

但是,非静态构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。

3)基类和派生类的构造函数

派生类对象的初始化由基类和派生类共同完成: 基类的成员由基类的构造函数初始化,派生类的成员由派生类的构造函数初始化。

当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,

构造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。

如果派生类又有对象成员,则先执行基类的构造函数,再执行成员对象类的构造函数,最后执行派生类的构造函数

至于执行基类的什么构造函数,缺省情况下是执行基类的无参构造函数,如果要执行基类的有参构造函数,则必须在派生类构造函数的成员初始化表中指出.

class A{ public:A(){x=0;cout<<"Default Constructor A."<<endl;}A(int i){x=i;cout<<"One Parameter Constructor A"<<endl;}private:int x;};class B : A{ public:B(){y=0;cout<<"Default Constructor B."<<endl;}B(int j){y=j;cout<<"One Parameter Constructor B."<<endl;}B(int i,int j):A(i){y=j;cout<<"Two Parameter Constructor B."<<endl;}private:int y;};int main(){B b1 = B();//执行基类A的构造函数A(),再执行派生类的构造函数B()cout<<endl;B b2 = B(5); //执行基类A的构造函数A(),再执行派生类的构造函数B(int)cout<<endl;B b3 = B(5,10); //执行执行基类A的构造函数A(int) ,再执行派生类的B(int i,int j):A(i)system("pause");return 0;}

输出结果:

如果基类A中没有提供无参构造函数public A( ) { x = 0; },则在派生类的所有构造函数成员初始化表中必须指出基类A的有参构造函数A(i),如下所示:

class A{ public:A(int i){x=i;cout<<"One Parameter Constructor A"<<endl;}private:int x;};class B : A{ public:B(int i):A(i){y=0;cout<<"One Parameter Constructor B."<<endl;}B(int i,int j):A(i){y=j;cout<<"Two Parameter Constructor B."<<endl;}private:int y;};


 

 

 




 

0 0
原创粉丝点击