您的位置:首页 > 编程语言 > C语言/C++

C++ Primer 阅读记录之继承类的构造函数

2016-05-23 00:00 288 查看
继承类对于基类的构造函数继承有几种情况

1.继承基类的无参数构造函数,形如:

class base

{

public:

base()

{

printf("伙计!基类构造函数被继承啦!");

}

};

class Derived :public base

{

public:

Derived()

{

}

};

这样,运行结果为:

伙计!基类构造函数被继承啦!

像这样,基类的无参数构造函数可以隐式的被继承,无需再继承类中多做处理。

对于基类有参数的构造函数,我们可不可以隐式继承呢?我们做如下实验:

class base

{

public:

base()

{

printf("伙计!基类构造函数被继承啦!");

}

base(int x)

{

printf("伙计!基类构造函数被继承啦!x=%d\n",x);

}

};

class Derived :public base

{

public:

Derived(int x)

{

printf("我是继承类的带参数构造函数!x=%d\n", x);

}

};

运行Derived(1);


运行结果:

伙计!基类构造函数被继承啦!

我是继承类的带参数构造函数!x=1

可以看到,先运行了基类的默认构造函数,然后再运行自己的带参数的构造函数,并没有运行基类的带参数的构造函数!对于基类有参数的构造函数,如果继承类想要继承,需要做如下处理:

class base{

public:

base(){

printf("伙计!基类构造函数被继承啦!");

}

base(int x)

{

printf("伙计!基类构造函数被继承啦!x=%d\n",x);

}

};

class Derived :public base

{

public:

Derived() {
}

Derived(int x) :base(x)

{

printf("我是继承类的带参数构造函数!x=%d\n", x);

}

};


运行Derived(1);

运行结果:
伙计!基类构造函数被继承啦!x=1

我是继承类的带参数构造函数!x=1

:base(x)其实就是 初始化列表 在调用自身构造函数前,显式调用base(x),这个很好理解。

这里我们就知道,带参数的基类构造函数是不能被继承的。

知识其实很简单,重点是运用在实际工作中时,我们设计程序时,要注意基类的带有参数的构造函数,在继承类中的使用,怎么使用才能好让阅读代码的人理解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: