C++语言基础 例程 虚基类及应用

贺老师的教学链接  本课讲解

虚基类应用举例

#include <iostream>
#include <cstring>
using namespace std;
class Person
{
public:
    Person(char *nam,char s,int a) //构造函数
    {
        strcpy(name,nam);
        sex=s;
        age=a;
    }
protected:                  //保护成员
    char name[20];
    char sex;
    int age;
};

class Teacher:virtual public Person //声明Person为公用继承的虚基类
{
public:
    Teacher(char *nam,char s,int a,char *t):Person(nam,s,a) //构造函数
    {
        strcpy(title,t);
    }
protected:        //保护成员
    char title[10];
}; //职称

class Student:virtual public Person //声明Person为公用继承的虚基类
{
public:
    Student(char *nam,char s,int a,float sco): //构造函数
        Person(nam,s,a),score(sco) {}           //初始化表
protected:      //保护成员
    float score;
};//成绩

class Graduate:public Teacher,public Student //声明Teacher和Student类为公用继承直接基类
{
public:
    Graduate(char *nam,char s,int a,char *t,float sco,float w): //构造函数
        Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco),wage(w) {} //初始化表
    void show( ) //输出研究生的有关数据
    {
        cout<<"name:"<<name<<endl;
        cout<<"age:"<<age<<endl;
        cout<<"sex:"<<sex<<endl;
        cout<<"score:"<<score<<endl;
        cout<<"title:"<<title<<endl;
        cout<<"wages:"<<wage<<endl;
    }
private:
    float wage;
}; //工资

int main( )
{
    Graduate grad1("Wang-li",'f',24,"assistant",89.5,1234.5);
    grad1.show( );
    return 0;
}
时间: 2024-09-20 09:04:06

C++语言基础 例程 虚基类及应用的相关文章

C++语言基础 例程 虚函数

贺老师的教学链接  本课讲解 指向基类的指针,为何只能访问来自基类成员?! #include <iostream> #include <string> using namespace std; //声明基类Student class Student { public: Student(int, string,float);//声明构造函数 void display( ); //声明输出函数 protected: //受保护成员,派生类可以访问 int num; string nam

C++语言基础 例程 虚析构函数

贺老师的教学链接  本课讲解 问题的由来 #include <iostream> using namespace std; class Point { public: Point( ) { } ~Point() { cout<<"executing Point destructor"<<endl; } }; class Circle:public Point { public: Circle( ) { } ~Circle( ) { cout<&

详谈C++中虚基类在派生类中的内存布局_C 语言

今天重温C++的知识,当看到虚基类这点的时候,那时候也没有太过追究,就是知道虚基类是消除了类继承之间的二义性问题而已,可是很是好奇,它是怎么消除的,内存布局是怎么分配的呢?于是就深入研究了一下,具体的原理如下所示: 在C++中,obj是一个类的对象,p是指向obj的指针,该类里面有个数据成员mem,请问obj.mem和p->mem在实现和效率上有什么不同. 答案是:只有一种情况下才有重大差异,该情况必须满足以下3个条件: (1).obj 是一个虚拟继承的派生类的对象 (2).mem是从虚拟基类派

实例讲解C++编程中的虚函数与虚基类_C 语言

虚函数① #include "stdafx.h" #include <iostream> using namespace std; class B0//基类B0声明 { public: void display(){cout<<"B0::display()"<<endl;}//公有成员函数 }; class B1: public B0//公有派生类B1声明 { public: void display(){cout<<

详解C++中基类与派生类的转换以及虚基类_C 语言

C++基类与派生类的转换 在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生类才是基类真正的

c++-C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题

问题描述 C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题 #include using namespace std; class vihicle { public: int i; virtual void run() { cout<<"111"; } }; class bicycle:virtual public vihicle { public: void run() { cout<<"bicycle run"; }

派生-运用虚基类对公司员工管理系统 的实现

问题描述 运用虚基类对公司员工管理系统 的实现 设计一个利用文件处理方式实现对公司人员(包括工程师.领导和主任工程师)进行管理,要求具有增加数据.更新数据.查询数据.删除数据以及实现数据的功能. 实现提示: 设计一个虚基类Staff(员工),包含编号.姓名和年龄保护数据成员以及相关的成员函数:由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数:再由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关的成员函数:然后由Engineer和Lea

c++虚基类二义性的问题

问题描述 c++虚基类二义性的问题 #includeusing namespace std;class A{public: A(int a):x(a){ cout<<""A constructor...""<<x<<endl; } int f(){return ++x;} ~A(){cout<<""destructor A...""<<endl;}private: i

关于多重继承和虚基类的问题

问题描述 关于多重继承和虚基类的问题 以下是源代码.为什么输出的sphere的球心是(003)而不是(123)? #include <iostream>using namespace std;class Point2D{protected: double x; double y;public: Point2D() { x = 0; y = 0; } Point2D(double a double b) { x = a; y = b; } virtual void show() { cout &