嵌入式学习21(C++继承)

1、实现方法(class 派生:派生方式 父类1,派生方式 父类2…….)
class A
{
};
class B:public A ……
{
};

A称为父类(基类)
B称为子类(派生类)

2、派生方式:公有派生,保护派生,私有派生
C++不会选择继承,而是全部继承(除了构造函数和析构函数),只是引用受限
公有派生:父类公有(子类公有) 私有(私有) 保护(保护)
保护派生:父类公有(保护) 私有(私有) 保护(保护)
私有继承:父类公有(私有) 私有(私有) 保护(保护)
子类不能直接访问父类继承过来的私有成员(可通过父类提供的非私有接口访问)

参考代码

#include<iostream>
#include<string>
using namespace std;

class person
{
public:
        person();
        person(int,const char*,const char*);
        void show();
private:
        int id;
public:
        string name;
protected:
        string addr;
};
person::person():id(0)
{
    this->name[0]='\0';
    this->addr[0]='\0';
    cout<<"初始化父类(默认)"<<endl;
}
person::person(int id,const char* name,const char*addr):id(id),name(name),addr(addr)
{
    cout<<"初始化父类(带参)"<<endl;
}
void person::show()
{
    cout<<"ID:"<<this->id<<"  姓名:"<<this->name<<"  地址:"<<this->addr<<endl;
}
class teacher:public person//共有继承person类
{
public:
        teacher();
        teacher(int id,const char*,const char*,const char*,float,const char*);
        void display();
private:
        string dept;
        float salary;
        string grade;
};
teacher::teacher(int id,const char* name,const char* addr,const char* dept,float salary,const char* grade):person(id,name,addr)//父类构造
{
    this->dept=dept;
    this->salary=salary;
    this->grade=grade;
}
void teacher::display()
{
//  cout<<"ID:"<<this->id<<"  姓名:"<<this->name<<"  地址:"<<this->addr<<endl;
    this->show();//间接访问继承过来的父类私有成员
    cout<<"  部门"<<this->dept<<"  薪水"<<this->salary<<"  年级"<<this->grade<<endl;
}
teacher::teacher():person()
{
    cout<<"初始化鸡类"<<endl;
//  this->person();  构造函数没有被继承
}
int main()
{
//  person a(123,"cmz","wuhan");
//  a.show();

    teacher b(123,"cmz","wuhan","研发部",8000,"3");
    b.display();
    b.show();

    return 0;
}

3、初始化:既要初始化新增,又要初始化继承过来的数据,
父类只能通过初始化列表,而不能在函数体中(this->person(:))
若子类不显示构造父类部分,则编译器会默认添加调用默认构造函数。
构造:先父类再子类
析构:先子类,后父类(栈区特点)

4、重载:同一作用域下,同名函数但形参不同。
重写(覆盖):
函数: 父类和子类,只要函数名一样,(形参不管一样还是不一样)类似全局和局部,子类的方法会覆盖父类(子类优先),只是作用域被覆盖,原来的方法还存在,不是替换
变量:子类优先
二义性:一个子类中,父类和子类出现同名现象
解决方法:(调用时加上作用域)子类.作用域::成员

5、 父子之间的赋值
不同类型之间不能相互赋值,同类型之间可互相赋值,内存空间布局相同
子类赋值给父类(可以,子类一定有父类的一部分,空间相似:)
父类赋值给子类(失败)
只能由子类赋值给父类,不能由父类赋值给子类
子类=子类+父类

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值