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

c++ 类的语法3

测试下默认构造函数。demo1:

void testClass3() {class Demo { // 没显示提供默认构造函数,会有默认构造函数。public:int x; // 普通成员变量,可默认构造};Demo demo1;//cout << "demo1.x: " << demo1.x << endl; // 报错: C4700 使用了未初始化的局部变量"demo1"demo1.x = 9527;cout << "demo1.x: " << demo1.x << endl;Demo* demo2 = new Demo; // 调用的默认构造函数,或这样写Demo* demo2 = new Demo()demo2->x = 1314520;cout << "demo2.x: " << demo2->x << endl;
}

打印:

再一个demo,不能生成默认构造函数:

原因, Parent类中有成员变量demo,其无法默认构造。所以需要显示添加构造函数。

同理子类没有显示调用父类构造函数,但又无法引用父类默认构造函数,编译也报错:

原因就是编译器无法为Parent类生成默认构造函数,因为其成员变量demo无法默认构造(Demo类已有有参构造函数了,所以没有默认构造函数了)。

修改成这样,还是会编译报错,提示类Demo不存在默认构造函数。

原因是,在执行构造函数前,会先初始化成员变量,即如果未在初始化列表中显式指定成员对象的构造方式,编译器会‌强制尝试调用该成员对象的默认构造函数‌(无论是否实际需要)。

修改成下面这样就编译通过:

void testClass4() {class Demo { // 无默认构造函数private:int a;public:Demo(int a) {this->a = a;}int getA() {return a;}};class Parent { // Parent 没有显式构造函数 → 编译器无法生成默认构造public:Demo demo;  // 成员 demo 无法默认构造Parent(Demo demo):demo(demo) { // 初始化列表中进行初始化,所以这里不会调用Demo的默认构造函数,编译通过}};class Sub : public Parent {public:Sub(Demo demo): Parent(demo){}};Demo demo(9527);Parent parent(demo);cout << "parent a: " << parent.demo.getA() << endl; Sub sub(demo);cout << "sub a: " << sub.demo.getA() << endl;
}

打印:

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

相关文章:

  • 八股文--JUC(2)
  • 物联网技术在银行安全用电系统中的应用与实践研究
  • 【C++】15.并发支持库
  • C语言水仙花数
  • 通过python安装小智语音服务器端
  • 从实模式到保护模式
  • 基于LTE帧结构参数的F-OFDM仿真
  • 刻录光盘--和炸铁路,tarjan
  • MGX:多智能体管理开发流程
  • 动态范围调整(SEF算法实现)
  • 在多个SpringBoot程序中./相对路径下隐患、文件覆盖问题
  • CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏
  • 基于51单片机和8X8点阵屏、矩阵按键的记忆类小游戏
  • C语言文件操作
  • 第八章 模板项目生成
  • Nextjs首屏加载速度性能从80分优化到98分
  • Qt控件:交互控件
  • PT2020 20触控I2C输出IC
  • 时频分析的应用—外部信号的显影和定点清除
  • 第三部分:内容安全(第十六章:网络型攻击防范技术、第十七章:反病毒、第十八章:入侵检测/防御系统(IDS/IPS))
  • 第J1周:ResNet-50算法实战与解析
  • C语言图案代码大全:从基础到高级
  • 院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法
  • PR-2021
  • ADC深入——SNR、SFDR、ENOB等概念
  • 深入浅出拆分学习,图神经网络拆分学习,混合联邦学习
  • 网络攻防模拟:城市安全 “数字预演”
  • 14 C 语言浮点类型详解:类型精度、表示形式、字面量后缀、格式化输出、容差判断、存储机制
  • AlphaEvolve:基于Gemini的算法发现与优化综合报告
  • AI在线写作平台:AnKo引领未来创作新潮流!