Intermezzo.L 发表于 2020-5-15 11:42:09

子对象的构造函数张啥样

本帖最后由 Intermezzo.L 于 2020-5-15 11:54 编辑

有疑问的地方:“如果在基类或子对象类型的声明中定义了带参数的构造函数,那么就必须显式地定义派生类的构造函数” 。
这句话前半部分,我是这样理解的,“在基类中定义带参数的构造函数或者在子对象中定义带参数的构造函数”。在基类中定义构造函数我明白,不过在子对象中定义构造函数是啥意思?我在下面写了一段代码,定义了基类的构造函数,现在我想定义子对象的构造函数,请问子对象的构造函数张啥样?是和类的构造函数一样的声明形式:子对象名(数据类型 形参……)?在下面的代码中(代码运行通过),我已经定义了基类的带参数构造函数,大家能不能在下面代码的基础上做出修改,体现出“子对象的构造函数”来,谢谢大家!

代码释义:
基类学生类,包括数据成员“学号”、“姓名”;派生类毕业生类,包括数据成员“分数”;子对象“student”。

#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student(int num,string nam)//定义学生类
    {
      number=num;
      name=nam;
    }
    void display()//定义学生类输出函数
    {
      cout<<"Number: "<<number<<endl;
      cout<<"Name: "<<name<<endl;
    }
protected:
    int number;
    string name;
};
class Graduate:public Student//毕业生类公有继承学生类
{
public:
    Graduate(int num,string nam,int num1,string nam1,int sco):Student(num,nam),student(num1,nam1)//定义毕业生类构造函数
    {
      score=sco;
    }
    void show()//定义毕业生类相关信息的输出函数
    {
      display();
      cout<<"Score: "<<score<<endl;
    }
    void student_display()//定义子对象相关信息的输出函数
    {
      student.display();
    }
private:
    int score;
    Student student;//声明子对象
};
int main()
{
    Graduate gra(1001,"Ronaldo",1002,"Messi",100);
    gra.display();//调用学生类输出函数
    cout<<endl;
    gra.show();//调用毕业生类输出函数
    cout<<endl;
    gra.student_display();//调用子对象的输出函数
    return 0;
}

倒戈卸甲 发表于 2020-5-15 17:24:11

这句话的意思是:如果基类你手动的写了有参构造,那么派生类你不能什么都不写(让编译器去提供默认的无参构造)。
这句话完全没必要纠结,纯属废话,没有任何意义,也完全影响不到你实际的编程开发

Intermezzo.L 发表于 2020-5-17 21:13:27

倒戈卸甲 发表于 2020-5-15 17:24
这句话的意思是:如果基类你手动的写了有参构造,那么派生类你不能什么都不写(让编译器去提供默认的无参构 ...

蟹蟹{:7_146:}
页: [1]
查看完整版本: 子对象的构造函数张啥样