C++继承

C++继承

继承的语法

单继承语法格式:
class 子类 : 继承方式 父类
多继承语法格式:
class 子类 : 继承方式 父类1 ,继承方式 父类2……

继承方式:

  1. public:
  2. protected:
  3. private:

用public方式继承父类时,子类与父类的

如上图所示:

  1. 使用公有继承的时候,子类里面除了父类的private作用域都按父类的作用域继承
  2. 使用保护继承的时候,子类里面除了父类的private作用域都要按protected方式继承
  3. 使用私有继承的时候,子类里面都是私有作用域

同名成员处理

1.子类对象可以直接访问到子类同名成员
2.子类对象访问父类同名成员需要加作用域
3.当子类和父类出现同名成员时会隐藏父类的同名成员 ,加作用域可以访问到父类的同名成员
同名静态成员的处理与上述

#include<iostream>
using  namespace std;
// 创建基类
class base
{
public:
 static int m_num;//静态成员变量需要 类内声明 类外定义
};
int base::m_num = 100;

//创建子类
class son:public base
{
public:
 static int m_num;
};
int son::m_num = 200;

void test01()
{
 son s;
 //访问静态成员可以有两种方法 :
 //1、通过对象访问
 //2、通过类名访问
 //通过对象访问
 cout << "son - m_num ==" << s.m_num << endl;
 cout << "base - m_num ==" << s.base::m_num << endl;
 //通过类名访问
 cout << "son - m_num ==" << son::m_num << endl;
 cout << "base - m_num ==" << son::base::m_num << endl; //通过类名son 访问父类base作用域下的成员变量
 //当子类与父类的成员函数名相同时,编译器会隐藏父类的成员函数 如果要访问需要 加上作用域
}
int main(void)
{
 test01();
}

虚继承和菱形继承

通过虚继承可以解决菱形继承的问题
此时使用虚继承则Animal 就成为虚基类
使用虚继承后会有一个虚基类指针(vbptr) 这个指针指向一个虚基类表(vbtable)
虚基类表里记录一个数据:偏移量 通过这个偏移量可以让找到唯一的数据

using namespace std;
class Animal
{
public:
 int m_age ;
};
//sheep 和 tuo 继承 Animal 类
//通过虚继承可以解决菱形继承的问题
//此时使用虚继承则Animal 就成为虚基类  
//使用虚继承后会有一个虚基类指针(vbptr) 这个指针指向一个虚基类表(vbtable) 
//虚基类表里记录一个数据:偏移量  通过这个偏移量可以让找到唯一的数据
class sheep:virtual public Animal{};

class tuo : virtual public Animal {};

class sheeptuo:public sheep ,public tuo{};
void test01()
{
 sheeptuo s;
 s.sheep::m_age = 11;
 s.tuo::m_age = 22;
 s.m_age = 12;   
 cout << "sheeptuo.m_age == " << s.sheep::m_age << endl;   //菱形继承需要指定作用域 
}
int main(void)
{
 test01();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值