C++继承,多继承,和虚继承

2018/5/4

1.继承的简单介绍

1.继承相当于父与子的关系,在C++中存在一种关系,分为父类和子类,子类可以"继承"父类的属性和行为,但是不能继承父类的构造方法

2.简而言之,就是根据已有的类派生出一个新的类(继承的类称为父类,产生的新类叫派生类)

3.单继承:

1.操作方式

class 派生类名:继承方式 基类名1,继承方式 基类2...
{
派生成员声明;

};

代码:

//类的特征 继承与派生
//2018.5.4 C++
//依据已有的类来派生出一个新的类
//由两个和两个以上的父类进行继承称为多继承
//class 派生类名:继承方式 基类名1,继承方式 基类名2(单继承)
#include<iostream>
#include<stdlib.h>
//1.Pupil
class Pupil
{
private:
	double chinese_grade;
	double math_grade;
public:
	Pupil() {};//默认构造
	Pupil(double chinese_grade, double math_grade)//带参构造
	{
		this->chinese_grade = chinese_grade;
		this->math_grade = math_grade;
	}
	double getChineseGrade()
	{
		return chinese_grade;
	}
	double getMathGrade()
	{
		return math_grade;
	}
	void show_pupilGrade()
	{
		std::cout << "语文成绩为" << getChineseGrade() << std::endl;
		std::cout << "数学成绩为" << getMathGrade() << std::endl;
	}
};
//派生类1 Junior
class Junior :public Pupil//继承
{
private:
	double English_grade;
	double Chemistry_grade;
	double Physics_grade;
public:
	Junior() {};//默认构造
	Junior(double English_grade, double Chemistry_grade,double Physics_grade)//带参构造
	{
		this->English_grade = English_grade;
		this->Chemistry_grade = Chemistry_grade;
		this->Physics_grade = Physics_grade;
	}
	double getEnglish_grade()
	{
		return English_grade;
	}
	double getChemistry_grade()
	{
		return Chemistry_grade;
	}
	double getPhysics_grade()
	{
		return Physics_grade;
	}
	void show_juniorGrade()
	{
		std::cout << "英语成绩为" << getEnglish_grade() << std::endl;
		std::cout << "化学成绩为" << getChemistry_grade() << std::endl;
		std::cout << "物理成绩为" << getPhysics_grade() << std::endl;
	}
};
//2.派生类2 Senior
class Senior :public Junior
{
private:
	double computer_grade;
public:
	Senior() {};
	Senior(double computer_grade)
	{
		this->computer_grade = computer_grade;
	}
	double getComputerGrade()
	{
		return computer_grade;
	}
	void show_seniorGrade()
	{
		std::cout << "计算机成绩为" << getComputerGrade() << std::endl;
	}
};

#include"text.h"
void main()
{
	
	Pupil stu1(90.5,80);
	stu1.show_pupilGrade();

	Junior stu2(99, 88, 99);
	stu2.show_juniorGrade();

	Senior stu3(100);
	stu3.show_seniorGrade();
	system("pause");
}

2.多继承(multiple inheritance

1.使用情况:当继承关系比较复杂的时候使用

当对象中的关系比较复杂的时候使用多继承,比如说:A是基类,B和C是A的子类,但是D是B和C的综合,所以这个时候使用单继承的方法

不适用,因而采用多继承的方法

2.语法:class A:public B,public C//说明A继承了B和C的方法,也说明了A是B和C的综合体*/ 


3.虚继承

虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性;所以采用虚继承的方式;

简单而言就是在继承的时候,为了解决二义性,最终只有基类的一份拷贝(为了解决多重继承而存在)


class CA
{
int k;
public:
void fun() {
cout << "CA::f" << endl;}
};
class CB : virtual public CA//虚继承
{ //实际上这两种方法都可以
};
class CC : virtual public CA//虚继承
{
};
class CD : public CB, public CC//使用多重继承
{
};

注:解决二义性

1.使用虚继承

2.使用方法的重写


注:继承权限符号相关介绍(转载)

一个派生类继承了所有的基类方法,但下列情况除外:
1基类的构造函数、析构函数和拷贝构造函数。
2基类的重载运算符。
3基类的友元函数

二:
公有继承(public):当一个类派生自公有基类时,
基类的公有成员也是派生类的公有成员,
基类的保护成员也是派生类的保护成员,
基类的私有成员不能直接被派生类访问,
但是可以通过调用基类的公有和保护成员来访问。


保护继承(protected): 当一个类派生自保护基类时,
基类的公有和保护成员将成为派生类的保护成员。

私有继承(private):当一个类派生自私有基类时,
基类的公有和保护成员将成为派生类的私有成员,访问时需用接口



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值