当前位置: 首页 > news >正文

C++继承、构造函数和析构函数

构造函数 与 析构函数

构造函数代表一个对象的生成,主要作用是初始化类的成员变量,可以被重载
如果没有显式构造函数,则实例化对象时,系统会自动生成一个无参的构造函数
构造函数的名称与类名相同

析构函数代表的是一个对象的销毁,不可以被重载
析构函数的名称是 ~类名()

class Animal
{
public:string name;int age;Animal():name("dog"), age(12)  //显式无参构造函数,这里借助c++11的列表初始化{cout << "这是无参构造函数" << endl;}Animal(string name, int age)  //显式有参构造函数{this->name = name;this->age = age;cout << "这是有参构造函数" << endl;}~Animal(){};  //析构函数
};Animal dog1; //会调用无参构造函数
Animal dog2("xiaohei",12); //会调用显式有参构造函数

注意事项:构造函数/析构函数 如果显式调用,则必须是public权限

C++封装

作用:保证数据安全性

三种权限
public:类内可以访问 子类可以访问 类外可以访问
protected:类内可以访问 子类可以访问 类外不可以访问
private:类内可以访问 子类不可以访问 类外不可以访问

C++继承

作用:实现代码复用,节省代码量

继承中的构造函数和析构函数

class Animal
{
public:string name;int age;Animal():name("dog"), age(12){cout << "这是基类无参构造函数" << endl;}Animal(string name, int age){this->name = name;this->age = age;cout << "这是基类有参构造函数" << endl;}~Animal(){cout << "这是基类析构函数" << endl;}
};class Dog:public Animal  //公有继承自Animal类
{
public:string name;int age;Dog(){cout << "这是Dog类无参构造函数" << endl;}Dog(string name, int age){this->name = name;this->age = age;cout << "这是Dog类有参构造函数" << endl;}~Dog(){cout << "这是Dog类析构函数" << endl;}
};void Func1()
{Dog dog1();Dog dog2("小黑", 12);
}int main()
{Func1();system("pause");
}

在这里插入图片描述

基类的构造函数和析构函数不会继承给派生类,但会在派生类生成对象时调用
构造函数调用顺序:先调用基类无参构造函数,再调用派生类的构造函数,如果想要调用基类的有参构造函数,需要显式调用 Dog(string name, int age) : Animal(name, age)
析构函数调用顺序:先调用派生类析构函数,再调用基类析构函数

顺便讲一下函数重载、函数重定义和函数重写的区别

函数重载:函数名相同,函数参数列表不同(参数类型、参数顺序、参数个数),通过传入不同的实参,调用不同的函数,执行不同的功能
函数重定义:当发生继承关系的时候,子类和父类存在同名函数,子类会 隐藏 父类的同名函数,执行自己的函数
函数重写:当发生继承关系的时候,父类提供虚函数,子类 重写(覆盖) 父类的虚函数,展现的是子类的功能

http://www.lryc.cn/news/17821.html

相关文章:

  • Python如何实现异步并发之async(1)
  • 震撼!阿里首次开源 Java 10万字题库,Github仅一天星标就超60K
  • 十三、RESTful API
  • 路由器防火墙配置(14)
  • 灰狼算法优化VMD对时序信号分析python
  • 微服务架构中的多级缓存设计还有人不懂?
  • 【图神经网络 医学/药物/目标/分子/(结构/相互作用)预测】用于药物-目标相互作用预测的元集合(Metapath)异构图神经网络(MHGNN)
  • 《Java核心技术》笔记——第六章
  • 假设检验的基本思想
  • c语言机试练习
  • Python的PyQt框架的使用-资源文件夹的使用
  • 如何遍历HashMap
  • 11技术太卷我学APEX-数据加载
  • JVM记录
  • 盘点机器学习实战中最频繁使用的AutoML工具库
  • 50-Jenkins-Lockable Resources插件实现资源锁定
  • 测试员,如果未来5年你不想失业……你得学会自动化测试
  • 腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理
  • 【运动控制】CNC三轴小线段路径规划
  • 渗透测试之DNS域名信息探测实验
  • ASE140N04-ASEMI低压MOS管ASE140N04
  • Qt——QLineEdit
  • 前端-HTML-zxst
  • 终极方案,清理 docker 占用磁盘过大问题, 亲测有效!
  • puzzle(1321)时间旅人
  • 活动预告 | 2023 Meet TVM 开年首聚,上海我们来啦!
  • CoreIDRAW 软件的强大功能及适用性
  • JavaScript Window History
  • 2023年人力资源管理师报名和培训费用是多少
  • 2023-2-23 刷题情况