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

C++继承与构造函数调用详解

当然可以!下面我将分别解释这两段 C++ 代码,并为它们加上详细的中文注释,帮助你理解类的继承、构造函数调用顺序以及面向对象的基本概念。


✅ 第一段代码:基类和派生类的构造函数调用顺序

#include <iostream>
using namespace std;// 基类 Base
class Base {
public:int data;// 基类构造函数,接收一个整型参数 xBase(int x) {std::cout << "Base constructor with x = " << x << std::endl;}
};// 派生类 Derived,公有继承自 Base
class Derived : public Base {
public:double ydata;// 派生类构造函数,接收两个参数 x 和 y// 使用初始化列表调用基类 Base 的构造函数Derived(int x, double y) : Base(x) {std::cout << "Derived constructor with y = " << y << std::endl;}
};int main() {// 创建派生类对象 obj,传入参数 10 和 3.14Derived obj(10, 3.14);return 0;
}

🔍 运行结果(输出):

 

浅色版本

Base constructor with x = 10
Derived constructor with y = 3.14

🧠 解释:

  • Base 是基类,它有一个带参数的构造函数。
  • Derived 是从 Base 公有继承来的派生类
  • 在创建 Derived 类的对象时,会先调用基类 Base 的构造函数,然后再执行派生类自己的构造函数。
  • 构造函数中使用了成员初始化列表 : Base(x) 来显式调用基类构造函数。
  • 这样可以确保基类部分在派生类之前被正确初始化。

✅ 第二段代码:Vehicle 基类与 Roadster 派生类的继承关系

 

cpp

浅色版本

#include <iostream>
using namespace std;// 基类 Vehicle(交通工具)
class Vehicle { // 抽象的交通工具类
public:string contry;   // 制造国家double price;    // 价格// 基类构造函数,用于初始化 contry 和 priceVehicle(string contry, double price) {cout << "基类的构造函数被调用" << endl;this->contry = contry;this->price = price;}// 成员函数 run()void run() {cout << "车跑起来了" << endl;}// 函数声明 stop()void stop(); // 未实现,但可以在子类中实现
};// 派生类 Roadster(跑车),继承自 Vehicle
class Roadster : public Vehicle { // 跑车类
public:int stateOfTop; // 敞篷状态:0 表示关闭,1 表示打开// 派生类构造函数,使用初始化列表调用基类构造函数Roadster(string contry, double price, int state): Vehicle(contry, price) { // 调用基类构造函数cout << "派生类的构造函数被调用" << endl;stateOfTop = state;}// 派生类特有函数 openTopped()void openTopped() {if (stateOfTop == 1)cout << "敞篷已打开" << endl;elsecout << "敞篷已关闭" << endl;}// 派生类特有函数 pdrifting()void pdrifting() {cout << "漂移模式启动" << endl;}
};int main() {// 创建 Roadster 对象 FTYPE,传入制造国、价格和敞篷状态Roadster FTYPE("法国", 70, 0); // 70 单位可能是万元return 0;
}

🔍 运行结果(输出):

 

浅色版本

基类的构造函数被调用
派生类的构造函数被调用

🧠 解释:

  • Vehicle 是基类,包含通用的交通工具属性如国家 contry 和价格 price
  • Roadster 是派生类,表示跑车,新增了一个专属属性 stateOfTop(敞篷状态)。
  • 构造函数使用了初始化列表来调用父类构造函数 : Vehicle(contry, price),这是推荐的方式。
  • 在 main() 中创建 Roadster 对象时,首先调用基类构造函数初始化共性数据,然后调用派生类构造函数初始化个性数据。
  • openTopped() 和 pdrifting() 是派生类特有的功能。

✅ 总结一下两段代码的关键点:

内容说明
继承方式使用 public 继承保留基类成员访问权限
构造函数调用顺序先调用基类构造函数,再调用派生类构造函数
初始化列表推荐使用 : BaseClass(args) 来调用基类构造函数
成员函数可以继承也可以扩展新的功能
封装性派生类拥有基类所有非私有成员

如果你还想了解析构函数调用顺序、虚继承、多态、抽象类等内容,也可以继续提问 😊

http://www.xdnf.cn/news/728245.html

相关文章:

  • flash写失败分析
  • Linux系统编程收尾(35)
  • 【C/C++】cmake实现Release版本禁用调试接口技巧
  • [定昌linux开发板]启用用户唯一性限制
  • Android全局网络监控最佳实践(Kotlin实现)
  • 从Java的Jvm的角度解释一下为什么String不可变?
  • Spring Boot3.4.1 集成redis
  • 自动过滤:用 AutoFilterer 实现高性能动态查询
  • 怎么从一台电脑拷贝已安装的所有python第三方库到另一台
  • 分库分表的常见策略
  • Arduino学习-跑马灯
  • day 26 函数专题
  • 基于云模型与TOPSIS评价算法的综合应用研究
  • 深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)
  • 深入理解Transformer架构:从原理到实践
  • python中 @注解 及内置注解 的使用方法总结以及完整示例
  • Jenkins 2.479.1安装和邮箱配置教程
  • SkyWalking如何实现跨线程Trace传递
  • 权威认证与质量保障:第三方检测在科技成果鉴定测试中的核心作用
  • 【C语言编译与链接】--翻译环境和运行环境,预处理,编译,汇编,链接
  • 怎么用外网打开内网的网址?如在异地在家连接访问公司局域网办公网站
  • DeepSeek 赋能数字人直播带货:技术革新重塑电商营销新生态
  • 处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249
  • Android 代码阅读环境搭建:VSCODE + SSH + CLANGD(详细版)
  • 生成式AI如何重塑设计思维与品牌创新?从工具到认知革命的跃迁
  • TCP通信与MQTT协议的关系
  • 使用ssh-audit扫描ssh过期加密算法配置
  • Qt实现csv文件按行读取的方式
  • ​什么是RFID电子标签​
  • 1. pytorch手写数字预测