多继承(研究生类)

#include<iostream>
using namespace std;
#include<string>;
class People
{
public:
	People(const string& name,const string& sex, int age)
		:_name(name)
		, _sex(sex)
		, _age(age)
	{

	}
	virtual void Display()
	{
		cout << "name: " << _name << endl;
		cout << "sex: " << _sex << endl;
		cout << "age: " << _age << endl;
	}
protected:
	string _name;
	string _sex;
	int _age;
};
class Student:virtual public People
{
public:
	Student(const string& name, const string& sex, int age, int num)
		:People(name,sex,age)
		, _num(num)
	{

	}
	virtual void Display()
	{
		cout << "Student" << endl;
	}
protected:
	int _num;
};
class Teacher:virtual public People
{
public:
	Teacher(const string& name, const string& sex, int age, int employeeNumber)
		:People(name, sex, age)
		, _employeeNumber(employeeNumber)
	{

	}
	virtual void Display()
	{
		cout << "Teacher" << endl;
	}
protected:
	int _employeeNumber;
};
class Graduate:public Teacher,public Student
{
public:
	Graduate(const string& name, const string& sex, int age, int employeeNumber, int num,const string& learnClass)
		:People(name, sex, age)
		, Teacher(name, sex, age,employeeNumber)
		, Student(name,sex,age,num)
	{
		_learnClass = learnClass;
	}
	virtual void Display()
	{
		cout << "Graduate" << endl;
	}
protected:
	string _learnClass;//研究科目
};
void Test1()
{
	People p("lxj", "女", 18);
	People* p1 = &p;
	p.Display();
	p1->Display();

	Student s("lt", "女", 21, 413);
	p1 = &s;//p1=(People*)&s;
	p1->Display();
}
void Test2()
{
	People p("lxj", "女", 18);
	People& p1 = p;
	p.Display();
	p1.Display();

	Student s("lt", "女", 21, 413);
	People& p2 =(People&) s;

	s.Display();
	p2.Display();
}
void Test3()
{
	Graduate  g("lxj", "女", 11, 22, 11, "software");
	g.Display();
}
int main()
{
	Test3();
	system("pause");
	return 0;
}
时间: 2024-12-13 01:44:14

多继承(研究生类)的相关文章

sizeof 和类继承 虚继承 求类大小

代码: #include <iostream> using namespace std; /* class a{ float k; // 4字节 virtual void foo(){} //有一个4字节的指针指向自己的虚函数表 }; class b : virtual public a{ virtual void f(){} }; 有这样的一个指针vptr_b_a,这个指针叫虚类指针,也是四个字节:还要包括类a的字节数,所以类b的字节数就求出来了. 运行结果: 8 16 */ /* clas

多线程_创建线程_继承Thread类

public class ThreadDemo {   public static void main(String[] args){         Demo d = new Demo();   d.start();      for(int i = 0;i < 100;i++){      System.out.println("MainThread" + i);   }   } } class Demo extends Thread {   public void run(

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

19._7泛型继承之泛型类继承普通类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _19._7泛型继承之泛型类继承普通类 { abstract class genClass<T> { protected T field; public virtual T property { get { return field; } } p

Java通过继承thread类与实现Runnable接口实现多线程的区别

Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 一.通过继承Thread类实现多线程 class MyThread extends Thread{ String name = null; int ticket = 0; public MyThread(String name){ this.name = name; } public synchronized v

继承和类设计

========================== ========================== oc是一门面向对象的语言,面向对象编程有三大特性:封装.继承.多态 一.封装 [注]封装就是把某些解决一些问题的代码进行模块化,对外部暴露一个接口.我们都称为封装了一个方法: [优点] 1.封装可以增强代码的复用度. 2.封装可以有效提高开发速度. 二.继承 子类拥有了父类的方法和属性的情况,我们称为继承: A:B(读作:A类继承B类,也就A类拥有了B类的方法和属性) [优点] 1.不用书

java继承2——类与继承(转)

一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的). 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于  char.short.byte.int.long.float.double等基本数据类型的

实现多线程的两种方法:继承Thread类或实现Runnable接口

实现多线程的两种方法:继承Thread类或实现Runnable接口 Java中实现多线程有两种方法:继承Thread类和实现Runnable接口,在程序开发中只要是多线程,我们一般都是实现Runnable接口,原因归结为一点:实现接口比继承类要好. 多线程的第一种实现方式:继承Thread类 步骤如下 创建一个继承Thread的类(假定为A),并重写Thread的run方法 构造一个A类对象,假定为aa 调用aa的start方法.(start方法是从Thread继承过来的) 具体例子如下 pac

Java中继承thread类与实现Runnable接口的区别

Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程.当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果. Java代码   package com.threadtest; class MyThread e

【struts2】继承ActionSupport类

在Struts2中,Action可以不实现任何特殊的接口或者继承特殊的类,仅仅是一个POJO(Plain Old Java Object,简单的Java对象)就可以:也可以实现Xwork2中的Action接口:但是由于Xwork的Action接口非常简单,为程序员提供的帮助有限,因此,在实际开发中,会更多的使用继承ActionSupport类来实现Action的方式,如下所示: import com.opensymphony.xwork2.ActionSupport; public class