【C++学习之路】派生类的构造函数(三)

三、多层继承的派生类

1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可

 1 class student
 2 {
 3 public:
 4     student(int n, string nam)
 5     {
 6         num = n; name = nam;
 7     }
 8 };
 9 class student1 : public student
10 {
11 public:
12     student1(int n, string nam, int a) :student(n, nam) {age = a;}
13 };
14 class student2 : public student1
15 {
16 public:
17     student2(int n, string nam, int a, int s) :student1(n, nam, a) {score = s;}
18 };

  基类:student(int n, string nam)

  一级派生: student1 ( int n, string nam, int a ):student (n,nam)

  二级派生:student2 ( int n, string nam, int a, int s ): student1 (n,nam,a)

2.注意!!不要写成: 

  student2 ( int n, string nam, int a, int s ): student (n, nam), student1(n, nam, a)//错误!!!

四、派生类的构造函数总结

1.student(所有的形参表写在这里):这里能写的东西只有(1)基类构造函数(2)内嵌对象的初始化列表(3)该类的新增数据成员{函数体里能写的东西有(1)基类中能在派生类中访问的数据的赋值(2)派生类新增数据成员的赋值(3)其他想加的语句}

2.在初始化列表中的执行顺序为(1)直接基类构造函数(如果没有显式写出的话,系统会自动调用一个无参构造函数)(2)内嵌对象对应的类的构造函数(具体调用哪一个取决于对象的参数形式)(3)其他语句

3.从本质上来讲,构造函数的作用在于初始化该类中的数据成员,但是达到同样的目的的方法有很多,比如我可以在类中写一个函数,给数据成员赋值;但是,最简单和可靠的方式还是调用构造函数,所有构造函数最终是要将所有的数据成员都初始化。(对于有些被继承了之后访问不了的数据成员怎么办?)

时间: 2024-10-05 10:06:05

【C++学习之路】派生类的构造函数(三)的相关文章

【C++学习之路】派生类的构造函数(一)

一.简单派生类的构造函数: 1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类. 2.一般来说,这样的派生类的构造函数的形式是: student( int i, string nam, int sid) : person( i, nam) { stuid = sid; } person(是基类的初始化列表) 3.构造函数的初始化列表的使用 3.1所有的构造函数都可以拿参数的初始化表来构造完全属于自己的数据成员,比如: 1 #include <iostream> 2 using na

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base() { cout<<"base destroyed!"<<endl; } };

对C++中派生类的构造函数和析构函数的认识

一:构造函数 形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),--基类名n(参数n),数据成员1(参数1),数据成员2(参数2),--数据成员n(参数n){ 各种操作的说明 } 执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体. 其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写. 如果基类只有默认构造函数,则基类名和参数表可以不用写出来. 二:复制构造函数 派生类的构造函数的形

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

C++:派生类的构造函数和析构函数

4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类的派生类的析构函数,随后再执行基类的析构函数. //例4.5 派生类的构造函数和析构函的执行顺序 #include<iostream> using namespace std; class Base{ //声明基类Base public: Base() { cout<<"Co

sdut 5-2 派生类的构造函数

5-2 派生类的构造函数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 通过本题目的练习可以掌握派生类构造函数的定义和使用方法. 要求定义一个基类Person,它有3个protected的数据成员:姓名name(char *类型).性别 sex(char类型).年龄age(int类型):一个构造函数用于对数据成员初始化:有一个成员函数show()用于输出数据成员的信息. 创建Person类的公有派生类Employee,增加两

派生类的构造函数

派生类对象包含基类对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具体形式: 构造函数名(形参表):基类名(基类构造函数实参表) { } 析构函数先调用派生类的构造函数,再调用基类的析构函数. 创建派生类的对象时,执行派生类的构造函数之前: 调用基类的构造函数------初始化派生类对象中从基类继承的成员 调用成员对象类的构造函数------初始化派生类对象中的成员对象 执行完派生类的析构函数后: 调用成员对象类的析构函数 调用基类的析构函数 析构函数的调用顺序和构造函

5-3 多级派生类的构造函数

5-3  多级派生类的构造函数 Time Limit: 1000MS    Memory limit: 65536K 题目描述 要求定义一个基类protected的数据成员:姓名sex(char类型):一个构造函数用于对数据成员初始化. Employee,增加两个数据成员 基本工资 leaveDays(Employee类的公有派生类):为它定义初始化成员信息的构造函数,和显示数据成员信息的成员函数共如示例数据所示,共<font face='\"Times' new=""