C++继承

C++继承

一 什么是继承

定义

继承(inheritance)是面向对象的三大特性之一 ,可以使代码复用的重要手段,我们可以在原来类的基础上添加新的功能和特性。继承的叫派生类或子类,被继承的叫父类或基类。

代码如下

//class 子类 : 继承方式 父类  继承的语法
#include <iostream>
using namespace std;

class people
{
 public:
    
    int age;
};

class student
{
    
};

//公共  父类中公共和保护的内容变成子类中公共的内容
class student : public people
{

};

//保护  父类中公共和保护的内容变成子类中保护的内容
class student : protected people
{

};

//私有  父类中公共和保护的内容变成子类中私有的内容
class student : private people
{

};

注意事项

父类中的所有非静态成员属性都会被子类继承

在继承中 私有成员我们也是继承了的 但是我们在子类中无法访问

二 子类和父类

一 子类和父类成员变量和函数同名时,如何通过子类对象访问父类成员变量和函数

直接看代码

class Father
{
public:

	int age;

	
	void Func()
	{

	}

	static void S()
	{

	}
};

class Son : public Father
{
public:

	int age;

	void Func()
	{

	}

	static void S()
	{

	}
};
int main()
{
	Son s;
	cout << s.Father::age << endl;//加个作用域就可以通过子类对象访问父类成员变量
	s.Father::Func();//函数也同理 加个作用域就可以通过子类对象访问父类成员函数
	                 //如果不加作用域的话 很可能就屏蔽掉父类同名的成员函数
	                 //非静态是加作用域通过子类对象进行调用
    
    Son::S();        //访问静态的成员变量和函数 可以通过类名调用   
	Son::Father::S();//访问父类中静态的成员变量和函数 可以通过类名调用 也是加作用域                 
二 多继承

直接看代码

class A
{
public:


	int a;
};

class B
{
public:


	int b;
};

//多继承的语法就是 加逗号隔开父类 
//如果是多继承 一个子类对象所占内存应该是所有父类内存的和
//这个子类对象内存就是8
class Son : public A, public B
{
    
};

//这里有一个需要注意的点 如果继承的两个父类有同名的函数和变量 还是要加作用域用于区分
void test()
{
    Son s;
    cout<< s.A::a << endl;
}

注意!!!

在实际开发不太建议使用 加作用域比较麻烦

三 菱形继承

一 概念

菱形继承就是两个子类继承于一个父类,又有一个类同时继承这两个子类,这种继承叫做菱形继承

比如 狼类和狗类是子类继承于父类动物类 狼狗作为子类继承于狼和狗类 就是一个菱形 叫做菱形继承

关系如下图

在这里插入图片描述

注意!! 存在问题

存在二义性 比如都有的属性 年龄 继承时会继承两份数据 但是我们只需要一份

二 虚继承

因为二义性 所以我们引入概念——虚继承

class Animal
{
public:

	int m_age;
};

class Wolf : virtual public Animal{};//虚继承 父类就叫做虚基类

class Dog : virtual public Animal{};//通过虚继承来解决二义性

class WD : public Wolf, public Dog{};

void test()
{
	WD wd;
	wd.Wolf::m_age = 10;
	wd.Dog::m_age = 20;
	
	cout << "狼的age:" << wd.Wolf::m_age << endl;
	cout << "狗的age:" <<wd.Dog::m_age << endl;
	cout << "狼狗的age:" <<wd.m_age << endl;
}

程序结果如下

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值