多级派生情况下派生类的构造函数

#include <iostream>
#include<string>
using namespace std;
class Student//声明基类
{
public://公用部分
   Student(int n, string nam)//基类构造函数
   {
      num=n;
      name=nam;
   }
   void display( )//输出基类数据成员
   {
      cout<<"num:"<<num<<endl;
      cout<<"name:"<<name<<endl;
   }
protected://保护部分
   int num;//基类有两个数据成员
   string name;
};
class Student1: public Student//声明公用派生类Student1
{
public:
   Student1(int n,char nam[10],int a):Student(n,nam)//派生类构造函数
   {age=a;}//在此处只对派生类新增的数据成员初始化
   void show( ) //输出num,name和age
   {
      display( ); //输出num和name
      cout<<"age: "<<age<<endl;
   }
private://派生类的私有数据
   int age; //增加一个数据成员
};
class Student2:public Student1 //声明间接公用派生类Student2
{
public://下面是间接派生类构造函数
   Student2(int n, string nam,int a,int s):Student1(n,nam,a) {score=s;}
   void show_all( ) //输出全部数据成员
   {
      show( ); //输出num和name
      cout<<"score:"<<score<<endl; //输出age
   }
private:
   int score; //增加一个数据成员
};
int main( )
{
   Student2 stud(10010,"Li",17,89);
   stud.show_all( ); //输出学生的全部数据
   return 0;
}

多级派生情况下派生类的构造函数

时间: 2025-01-04 19:35:19

多级派生情况下派生类的构造函数的相关文章

15.5——继承情况下的类作用域

继承情况下的类作用域: 在继承的情况下,派生类的作用域嵌套在基类作用域的下. 先在派生类的作用域范围内查找,要是没找到,接着在外围的基类作用域中查找. 1. 名字查找在编译时发生 (1)对象,引用或指针的静态类型决定了其所能作用的成员,即使是当动态类型和静态类型可能不一样时也满足 (2)例如使用基类的指针就不能去访问派生类的成员. 2. 名字冲突与继承 (1)当基类和派生类的成员同名时,基类的成员在直接访问时将被屏蔽. (2)可以采用域作用符::来访问被屏蔽的成员. (3)最好不要有基类和派生类

C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

什么是序列化?在什么情况下将类序列化?

什么是序列化?在什么情况下将类序列化?   序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题.序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutpu

Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

在Objective-C 2.0中,有2种办法可以在不使用类继承的情况下,扩展已有类的实现.一种是分类(Category),另一种是类扩展(Class Extensions). 前者可以在没有已有类的源代码的情况下扩展类的实现.可以定义新的方法,但不能定义实例变量. 后者必须有已有类的源代码才能实现扩展.但是相比分类,类扩展还可以定义实例变量,并且隐藏这些信息.也就是说,类扩展是一种定义私有变量和私有方法的手段. Objective-C,如何在不使用类继承的情况下,扩展已有类的实现

c++--类的构造函数与拷贝控制

类(class)与结构体(struct)的位移区别在于:默认情况下,类的派生方式和访问权限是private的,struct的派生方式和访问权限是public的. 构造函数 构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数. 特点1:不同于其他成员函数,构造函数不能被声明为const的(参见7.1.2,P231). 当我们创建类的一个const对象时,直到构造函数完成初始化过程,对象才能真正取得其"常量属性".因此,构造函数在const对象的构造过程中

C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域

面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:如果不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这种类作用域的层次嵌套使我们能够直接访问基类的成员,就好像这些成员是派生类成员一样: Bulk_item bulk; cout << bulk.book() << endl; 名字book的使用将这样确定[先派生->后基类]: 1)bulk是Bulk_item类对象,在Bulk_item类中查找,找不到名

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

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

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

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

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

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