基类的构造函数和析构函数能不能被继承

1:简单的派生类的构造函数

#include<iostream> 
#include<string>
using namespace std;
class Student//声明基类
{
protected:
	int num;
	string name;
	char sex;
public:
	Student(int n,string nam,char s)//定义基类(含参)构造函数
	{
		num=n;
		name=nam;
		sex=s;
	}
};
class Student1 : public Student//声明公用派生类Student1
{
private:
	int age;
	string addr;
public:
	Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)
		                                                              //定义派生类构造函数
	{
		age=a;
		addr=ad;
	}
	void show()
	{
		cout<<"num:"<<num<<endl;
		cout<<"name:"<<name<<endl;
		cout<<"sex:"<<sex<<endl;
		cout<<"age:"<<age<<endl;
		cout<<"address"<<addr<<endl<<endl;
	}
	~Student1 (){}
};

 派生类构造函数首行的写法

Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)

派生类构造函数一般形式为

派生类构造函数名(总参数表):基类构造函数名(参数表)

        {派生类中新增数据成员初始化语句}

冒号“:”前面部分是派生类构造函数的主干,他和以前介绍过的构造函数的形式相同,但它的总参数表中包括基类构造函数所需的参数和对派生类新增的数据成员初始化所需的参数。冒号“:”后面部分是要调用的基类构造函数及其参数。

       从上面列出的派生类Student1构造函数首行中可以看到,派生类构造函数名(Student1)后面括号内的参数表中包括参数的类型和参数名(如int n) ,而基类构造函数名后面括号内的参数表列只有参数名而不包括参数类型(如n,num,s),因为在这里不是定义基类构造函数,而是调用基类构造函数,因此这些参数是实参而不是形参。它们可以是常量、全局变量和派生类构造参数总参数表中的参数。

       从上面列出的派生类Student1构造函数中可以看到:调用基类构造函数Student时给出3个参数(n,nam,s),这是和定义基类构造函数时指定的参数相匹配的。派生类构造函数Student1有5个参数,其中前3个是用来传递给基类构造函数,后面两个(a和ad)是用来对派生类所增加的数据成员初始化的。

2.派生类的析构函数

析构函数的作用是在对象撤销之前,进行必要的清理工作。

在派生时,派生类是不能继承基类的析构函数的,也需要通过派生类的析构函数去调用基类的析构函数。在派生类中可以根据需要定义自己的析构函数,用来地派生类中所增加的成员进行清理工作。基类的清理工作任然由基类的析构函数负责。

调用的顺序与构造函数正好相反:先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。

                                                                                                                           摘自《C++程序设计基础  谭浩强》


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值