基类构造函数调用规则
事实上,通过派生类创建对象时必须要调用基类的构造函数,这是语法规定。换句话说,定义派生类构造函数时最好指明基类构造函数;如果不指明,就调用基类的默认构造函数(不带参数的构造函数);如果没有默认构造函数,那么编译失败。请看下面的例子:

#include <iostream>
using namespace std;//基类People
class People{public :People() ;//基类默认构造函数People(char *name,int age);protected:char *m_name;int m_age;
};
People::People():m_name("XXX"),m_age(0){}
People::People(char *name,int age):m_name(name),m_age(age){}//派生类Student
class Student:public People{
public:Student();Student(char*,int ,float);public:void display();private:float m_score;
};Student::Student():m_score(0){} //派生类默认构造函数
Student::Student(char *name,int age,float score):People(name,age),m_score(score){}void Student::display(){cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<"。"<<endl;
}
int main(){Student stu1;stu1.display();Student stu2("小明", 16, 90.5);stu2.display();return 0;
}

运行结果:
xxx的年龄是0,成绩是0。
小明的年龄是16,成绩是90.5。

创建对象 stu1 时,执行派生类的构造函数Student::Student(),它并没有指明要调用基类的哪一个构造函数,从运行结果可以很明显地看出来,系统默认调用了不带参数的构造函数,也就是People::People()。

创建对象 stu2 时,执行派生类的构造函数Student::Student(char *name, int age, float score),它指明了基类的构造函数。

在第 27 行代码中,如果将People(name, age)去掉,也会调用默认构造函数,第 37 行的输出结果将变为:
xxx的年龄是0,成绩是90.5。

如果将基类 People 中不带参数的构造函数删除,那么会发生编译错误,因为创建对象 stu1 时需要调用 People 类的默认构造函数, 而 People 类中已经显式定义了构造函数,编译器不会再生成默认的构造函数。

C++基类和派生类的构造函数(二)相关推荐

  1. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  2. 构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...

    虚基类及其派生类构造函数[1] 建立对象时所指定的类称为最远派生类. 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的. 在整个继承结构中,直接或间接继承虚基类的所有派生类,都 ...

  3. 派生类到基类的转换 和基类到派生类的转换

    一. 基类与派生类的转换     3种继承方式(公用.保护.私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能.     不同类型数据之间在一定条件下可以进行类型的转换.基类与派生 ...

  4. C++:基类和派生类

    4.1 派生类的声明 继承实例如下: class Person{ //声明基类Person public:void print(){cout<<"name:"<& ...

  5. 基类与派生类之间的转换关系

    一. 派生类到基类的转换: 1.可以使用派生类指针初始化基类指针,同样也可以使用派生类的引用或对象初始化基类的引用,注意这里提到的是对象的指针和引用而不是对象本身: (但是,在使用基类指针(或引用)指 ...

  6. c++中基类与派生类中隐含的this指针的分析

    先不要看结果,看一下你是否真正了解了this指针? 1 #include<iostream> 2 using namespace std; 3 4 class Parent{ 5 publ ...

  7. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

    C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...

  8. python根据一个基类生成派生类_python中的封装继承多态

    1.封装 类的封装可以隐藏类的实现细节,迫使用户只能通过方法去访问数据,这样就可以增强程序的安全性.接下来演示未使用封装可能出现的问题,如例所示. 在例中,运行结果输出的成绩为-68,在程序中不会有任 ...

  9. 14.11 基类与派生类关系的详细再探讨

    一:派生类对象模型简述 Men mymen:子类(派生类对象),包含多个组成部分(也就是多个子对象); <1>一个是含有派生类自己定义的成员变量,成员函数的子对象: <2>一个 ...

  10. C++ 抽象基类与派生类

    抽象基类与派生类:构造方法的注意事项 1.抽象基类的构造方法不要用纯虚函数 2.子类的属性名如果和抽象基类的属性名相同的情况下 (1).使用子类对象调用此属性时会优先调用子类的属性 (2).在构造方法 ...

最新文章

  1. 60+业内技术专家,9大核心技术专题,AI ProCon倒计时一周!
  2. STM32,CAN总线过滤器的设置详细讲解
  3. java传参怎么理解_如何理解Java的值传递
  4. python是外部还是编程_Python网络编程(绑定到外部地址)
  5. 毛绒材质渲染_学室内设计必进,建模渲染那都不是事儿
  6. JavaScript 弹出窗口总结
  7. 训练自己的Android TensorFlow神经网络
  8. FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking 效果展示
  9. Flex 4(Hero)对应Flex 3 容器方法
  10. 【leetcode刷题笔记】Roman to Integer
  11. Python(十七):python的编程规范、PEP8
  12. Linux下iwconfig权限,Linux中用iwconfig配置wireless-tools
  13. ESP8266获取心知天气
  14. linux crontab清理脚本,crontab定时清理日志
  15. vue里面watch监听当前路由信息
  16. C1-01基础任务和知识拓展
  17. 自由落体matlab代码,应用MATLAB辅助自由落体运动教学
  18. 2^n+1的因数分解问题
  19. ros 机械臂复位_限位开关在机械手控制S7-300 PLC项目中的电气设计与程序编制
  20. python数据按照分组进行频数_Pandas:按两列分组并计算第二列中所有值的出现次数...

热门文章

  1. RMQ问题-ST方法
  2. Linux 入门学习-LINUX基本认识及常用命令
  3. 前端模版引擎选择指南
  4. 我的Java开发学习之旅------Base64的编码思想以及Java实现
  5. 第2章 数字之魅——求二进制中1的个数
  6. sts从mysql数据库中反向生成实体类
  7. bugfree3.0.2版本升级--更新版
  8. 为什么泪水充满了我的眼眶,那是一种从未有过的感伤,
  9. 原来,07年我把自己给和谐了
  10. 奇异面试经历之张冠李戴