派生类的构造函数

简介: 派生类的构造函数

前言:

  前文我们谈到过构造函数C++的构造函数》,现在我们主要讨论构造函数在派生类里的运用。

1.必备知识/概念

  1. 继承与派生
  2. 派生类构造函数的定义与声明
  3. 派生类构造函数的功能

2.继承与派生

    继承派生其实是指两种关系!

这两种关系就像家庭族谱里边的长辈与晚辈的某种联系,我们可以这样理解:你和你的父亲肯定在性格或者为人处世等方面有诸多相似之处,我们说那是你遗传了你父亲的某些特质。也就是说你继承了你父亲的这些特点,而反过来,我们说是你父亲把这些特质派生给了你。

我们现在把这个关系重新命名,父亲=基类;儿子=派生类。它们之间的箭头是由派生指向基类

总结成一句话:

      父亲派生给儿子,儿子继承父亲。

3.派生类构造函数的定义与声明

   我们首先定义一个基类Student,在定义一个派生类Student1,通过派生类去访问基类Student的成员数据,主函数调用派生类的成员函数show进行输出。

   以上是我们要写的一个业务逻辑,我们在主函数建立对象的时候直接给出参数,进行输出。

   1.首先定义基类Student,也就是我们说的父亲。

class Student
{
public:
  Student(int n, string nam, char s) :num(n), name(nam), sex(s) {};//定义基类构造函数
  ~Student()//定义基类的析构函数
  {
  }
protected:
  int num;
  string name;
  char sex;
};

基类的构造函数进行数据初始化,我们用的是初始化表,这是我个人比较喜欢用的,因为比较方便。

Student(int n, string nam, char s) :num(n), name(nam), sex(s) {};

2.定义一个派生类Student1,去访问基类的数据成员

class Student1:public Student
{
public:
  Student1(int n, string nam, char s, int a, string ad) :Student(n, nam, s), age(a), addr(ad) {}//定义派生类构造函数
  void show()
  {
    cout << "num:" << num << endl;
    cout << "name:"<<name << endl;
    cout << "sex:" << sex << endl;
    cout << "age:" << age << endl;
    cout << "addr:" << addr << endl;
  }
  ~Student1() {}//派生类析构函数
private:
  int age;
  string addr;
};

在派生类里我们需要知道下面几点:

  1. 继承方式的定义,这里我们定义的公用继承。
  2. 派生类的公用成员函数show能够访问基类的保护protected数据成员
  3. 派生类的作用就是为基类补充数据成员ageaddr

4.主函数的写法

int main()
{
  Student1 stud1{ 100010,"wang",'f',19,"115 Beijing Road,Shanghai" };
  Student1 stud2{ 100011,"Zhang",'m',21,"213 Shanghai Road,Beijing" };
  stud1.show();
  stud2.show();
  return 0;
}

建立对象stud1stud2,带着参数进行调用函数show

5.派生类构造函数的功能

数据初始化!

目录
相关文章
|
安全 Java 编译器
C++将派生类赋值给基类
在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10; printf("%f\n", b); 输出结果为 10.000000,编译器会自动添
129 0
|
2月前
|
编译器 C++
C++的基类和派生类构造函数
基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。 在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。 这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数。 下面的例子展示了如何在派生类的构造函数中调用基类的构造函数:
32 1
|
5月前
|
C++ Linux
|
5月前
|
编译器 C++
C++程序中的派生类构造函数
C++程序中的派生类构造函数
42 1
|
编译器 C++
C++中虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面我们以菱形继承为例来演示构造函数的调用: #include <iostream> using namespace std; //虚基类A class A{ public: A(int a); protected: int m_a; }; A:
88 1
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
134 0
|
编译器 C语言 C++
C++ 继承,构造函数,析构函数(上)
C++ 继承,构造函数,析构函数
|
编译器 定位技术
在父类的构造函数中调用虚函数为什么不能实现多态
在父类的构造函数中调用虚函数为什么不能实现多态
109 0
基于C/C++将派生类赋值给基类的详细讲解
基于C/C++将派生类赋值给基类的详细讲解
187 0