C++派生类的构造函数和析构函数

C++派生类的构造函数和析构函数

派生类的构造函数和析构函数

#include <iostream>
 
using namespace std;
 
class student
{
public:
    student(int num,char* n):number(num),name(n){}
    ~student(){cout << "student deconstruted" << endl;}
protected:
    int number;
    char* name;
};
 
class student1:public student
{
public:
    student1(int num,char* n,bool s,int a):student(num,n),sex(s),age(a){}
    void show();
    ~student1(){cout << "student1 deconstruted" << endl;}
protected:
    bool sex;
    int age;
};
 
void student1::show()
{
    cout << "num: " << number << endl;
    cout << "name: " << name << endl;
    cout << "age: " << age << endl;
    cout << "sex: " << sex << endl;
}
 
int main()
{
    student1 stu(45,"shukai",true,20);
    stu.show();
    return 0;
}
 
 1.1派生类构造函数的一般形式为:
派生类构造函数名(总参数表列):基类构造函数名(参数表列)
{派生类新增加的成员的初始化语句}
1.2对派生类新增加的成员可以用初始化表进行初始化。如:
student1(int num,char* n,bool s,int a):student(num,n),sex(s),age(a){}
1.3在类中对派生类构造函数做声明时,不包括基类构造函数名以及参数表列(student(num,n)),只在定义函数时将它列出。
1.4建立一个对象时,执行构造函数的顺序:
A.派生类构造函数调用基类的构造函数。
B.再执行派生类构造函数体本身(即派生类构造函数的函数体)

有子对象的派生类构造函数

#include <iostream>
 
using namespace std;
 
class student
{
public:
    student(int n,char* nam):num(n),name(nam){}
    void display(){cout << name << " " << num << endl;}
protected:
    int num;
    char* name;
};
 
class student1:public student
{
public:
    student1(int n,char* nam,int n1,char* nam1,int a,bool s):student(n,nam),
        monitor(n1,nam1),age(a),sex(s){}
    void display1();
    void display_monitor();
private:
    int age;
    bool sex;
    student monitor;
};
 
void student1::display1()
{
    cout << "student is " << endl;
    display();
    cout << age << " " << sex << endl;
}
 
void student1::display_monitor()
{
    cout << "monitor is " << endl;
    cout << age << " " << sex << endl;
}
 
int main()
{
    student1 stu(45,"shukai",1,"abc",20,true);
    stu.display1();
    stu.display_monitor();
    return 0;
}
 
 

1.1类的数据成员除了标准成员,如(int,char)或系统提供的类型(如string),实际上,类的数据成员中还可以包含类对象,如可以声明一个类时包含这样的数据成员:
Student s1;
这时,s1就是类对象中的内嵌对象,称为子对象(subobject)。
1.2派生类构造函数的任务应该包括3部分:
A.对基类成员的初始化
B.对子对象数据成员的初始化。
C.对派生类数据成员的初始化。
1.3定义派生类构造函数的一般形式为:
派生类构造函数名(总参数表列);基类构造函数名(参数表列),子对象名(参数表列)
{派生类中新增数据成员的初始化语句}
如:student1(int n,char* nam,int n1,char* nam1,int a,bool s):student(n,nam),monitor(n1,nam1),age(a),sex(s){}
只不过派生类中的新生成员用初始化列表来进行初始化而已。
1.4基类构造函数和子对象的次序是可以任意的,如上面的构造函数可以写成:
student1(int n,char* nam,int n1,char* nam1,int a,bool s):monitor(n1,nam1),student(n,nam),age(a),sex(s){}
编译系统是根据相同的参数名,而不是根据参数的次序来传递数据的。

多层派生时的构造函数

#include <iostream>
#include <string>
 
using namespace std;
 
class student
{
public:
    student(int n,string nam){num=n;name=nam;}
    void display(){cout << "num: " << num << " name: " << name << endl;}
protected:
    int num;
    string name;
};
 
class student1:public student
{
public:
    student1(int n,string nam,int a):student(n,nam),age(a){}
    void display1(){display();cout << "age: " << age << endl;}
protected:
    int age;
};
 
class student2:public student1
{
public:
    student2(int n,string nam,int a,bool s):student1(n,nam,a),sex(s){}
    void display2(){display1();cout << "sex: " << sex << endl;}
protected:
    bool sex;
};
 
int main()
{
    student2 stu(45,"shukai",20,true);
    stu.display2();
    return 0;
}
 
 1.1 student2的构造函数为student2(int n,string nam,int a,bool s):student1(n,nam,a),sex(s){},注意不必列出每一层的构造函数,只要列出上一层的构造函数即可。

派生类构造函数的特殊形式

1.1当不需要对派生类新增成员做任何初始化操作的时候,派生类构造函数的函数体可以为空,即构造函数是空函数。
1.2如果在基类中没有构造函数或者定义了没有参数的构造函数,那么在定义派生类的构造函数时可以不必写基类的构造函数。

派生类的析构函数

1.1析构函数与派生类的构造函数相反,构造函数是先构造基类在构造子对象再构造派生类,而析构时,先对派生类析构,再对子对象析构,然后再对基类析构。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 4.0系统,全新Android 4.0系统_手机Android频道-中关村在线

与搭载Android 2.3系统的OPPO R807不同&#xff0c;OPPO R817搭载了Android 4.0系统。不过这款手机仍旧舍弃了Android系统的原生界面&#xff0c;因此两款手机在界面上的变化其实并不非常大。升级Android 4.0后界面变化不大内置多款主题与解锁样式可更改字体及SIM卡信息OPPO R8…

android sqlite 示例,android SQLite数据库使用示例

数据库的操作&#xff0c;需用到数据库类SQLiteDatabase&#xff0c;重写管理员类SQLiteOpenHelper&#xff0c;用Cursor查询数据一、操作数据库的辅助类&#xff0c;包含打开、关闭、增删改查方法//自定义的数据库的接口&#xff0c;其中包含SQLiteHelperpublic class NotesDb…

C++虚基类

C虚基类 1.1虚基类的作用&#xff1a;如果一个派生类有多个直接基类&#xff0c;而且这些直接基类又有一个共同的基类&#xff0c;则在最终的派生类中会保留该间接共同基类的多份同名成员。所以为了解决这个问题&#xff0c;C提供虚基类的方法&#xff0c;使得在继承间接共同基…

android清除图案锁 位置,安卓手机清除锁屏密码、锁屏图案的教程

来源&#xff1a;安卓网2014-01-21/12:15本文分享一个安卓手机清除锁屏密码以及锁屏图案的几种方法和详细教程。如果锁屏密码、或者图形锁屏密码忘记了怎么办&#xff0c;怎么清除呢?下面小编整理了3种安卓手机清除锁屏图案密码的方法。↓↓↓准备工作&#xff1a;1.确保已经安…

C++多态性

C多态 1.1多态性(polymorphism)是面向对象程序设计的一个重要特征。1.2从系统实现的角度看&#xff0c;多态性分两类&#xff1a;静态多态性与动态多态性。静态多态性是通过函数重载(运算符重载也是函数重载)来实现的。它又称为编译时多态。动态多样性是在程序运行过程中才动态…

ue4 android vulkan,在Android用vulkan完成蓝绿幕扣像

效果图(1080P处理)因为摄像头开启自动曝光&#xff0c;画面变动时&#xff0c;亮度变化导致扣像在转动时如上。这个demo主要测试二点&#xff0c;一是测试ndk camera集成效果,二是本项目对接外部实现的vulkan层是否方便&#xff0c;用于以后移植GPUImage里的实现。我简化了在an…

C++静态关联与动态关联

1.1确认具体对象的过程叫关联(binding)&#xff0c;在这里指把一个函数与类对象捆绑在一起&#xff0c;建立关联。 1.2什么是静态关联&#xff1f; 函数重载和通过对象名调用的虚函数&#xff0c;在编译时即可确定其调用的虚函数属于哪一个类&#xff0c;其过程称为静态关联&…

html5 规定输入字段,HTML5 Input属性详解

本篇教程探讨了HTML5 Input属性详解&#xff0c;希望阅读本篇文章以后大家有所收获&#xff0c;帮助大家HTML5CSS3从入门到精通 。<value 属性value 属性规定输入字段的初始值&#xff1a;readonly 属性readonly 属性规定输入字段为只读(不能修改)&#xff1a;readonly 属性…

html5程序自动登录,Jtro的技术分享:网页调起unity的exe程序并自动登录

思路是这样&#xff1a;通过一个额外的exe文件来实现登录&#xff0c;并保存一个token文件&#xff0c;然后在unity的项目提交数据的时候读取这个token向服务器发送数据。下面是具体的方法&#xff1a;s这个需要用到WPF来编写&#xff0c;首先打开VS2017&#xff0c;选择创建WP…

C++纯虚函数与抽象类

纯虚函数 1.1纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般形式为&#xff1a;virtual 函数类型 函数名 (参数列表) 0;如 virtual float area() const 0;1.2纯虚函数没有函数体&#xff0c;而且这是一个声明语句后面应有分号。1.3纯虚函数最后面的“0”并…

html 图片防盗链,【反防盗链】介绍一个对付图片防盗链的方法

悲催的声明&#xff1a;由于腾讯也采用了防盗链技术&#xff0c;本文方法已经失效了&#xff01;当我们想在文章里引用某张图片时&#xff0c;如果对方设置了防盗链&#xff0c;我们看到的将是404或forbidden或其他图片&#xff0c;而不是想要的那张图片&#xff0c;为此&#…

C++文件操作与文件流

文件的概念 1.1文件是程序设计中一个重要的概念&#xff0c;所谓“文件”&#xff0c;一般指存储在外部介质上数据的集合。1.2外存文件包括磁盘文件&#xff0c;光盘文件&#xff0c;和U盘文件。1.3对用户来说常用的文件类型有两大类&#xff0c;一类是程序文件&#xff0c;如C…

html字体阴影怎么设置6,css怎么设置字体阴影

css设置字体阴影的方法&#xff1a;使用代码【text-shadow:3px 3px 3px #00f;】&#xff0c;【text-shadow】属性应用于阴影文本&#xff0c;语法为【text-shadow: h-shadow v-shadow blur color;】。本教程操作环境&#xff1a;windows10系统、css3版&#xff0c;该方法适用于…

PCL入门

pcl的入门 本博客主要是对外文的翻译&#xff0c;及其他资料的一些整理。 pcl 分割成好几个模块的库 Filters(滤波器) Features(特征) Keypoints(关键点) Registration(注册) KdTree:k-dimension tree(k维的树) OcTree(八叉树) Segmetation(分割) Sample Consensus(采…

台式电脑怎么看计算机型号,怎么查看台式机的型号

电脑配置有很多&#xff0c;很多人在买电脑总是觉得配置和商家说的不是一样的&#xff0c;下面就让小编教大家台式机怎么查看型号和配置。查看台式机型号和配置的方法金山卫士查看首先打开自己电脑的安全卫士软件&#xff0c;其实卫士都有这种功能的&#xff0c;我这里实用的是…

pcl的初步使用(ROS)

ROS里面已经预装好了pcl&#xff0c;和一些与pcl之间的转换&#xff0c;我们接下来看看如何在ros里面使用pcl.。 总的来说&#xff0c;PCL包含了一个很重要得到数据结构&#xff0c;叫PointCloud&#xff0c;这是一个模板类&#xff0c;把点的类型作为模板参数。 下面是最重要…

四川大学计算机学硕分数线,川大计算机考研分数线

川大计算机考研分数线&#xff1f;2016高考志愿填写&#xff0c;高考考生家长有开端着手预备吗 厚学网收拾了对于普通高校招生填写志愿的有关诀窍&#xff0c;供考生和家长参阅。绝密:高考填报志愿有技巧!志愿填报需要注意的细节问题&#xff1a;语种有限制在咱们要学习的外语语…

pcl里面的3D特征

我这里不介绍pcl里面的类的命名规范&#xff0c;及点的类型。为什么呢?pcl里面类的命名规范&#xff0c;比较繁琐&#xff0c;而且主要是针对要对pcl这个库要开源的人士&#xff0c;而pcl里面的点的类型太多&#xff0c;足够满足你的要求。所以我们要走一条具有中国特色的pcl主…

html本地缓存未查看信息,不同用户看到了相同的信息-一次web系统缓存问题的解决...

最近负责的系统总是出现奇怪的缓存问题&#xff0c;在这里简单记录一下碰到的问题和踩到的坑。问题&#xff1a;用户反映使用不同账号A&#xff0c;B登录时&#xff0c;都出现账号A的页面信息(未邮寄账单提示)。如下所示&#xff1a;图1&#xff1a;未邮寄账单提示一 session缓…