c++之继承中的特殊关系

一、隐藏

如果基类和派生类中有同名的数据成员或者成员函数,在实例化派生类对象,调用该方法将会调用派生类的方法,而基类的方法虽然被继承但是看起来被隐藏一样

举例:

class People
{
public:
	void eat(){cout<<"吃饭"<<endl;}
};

class Student:public People
{
public:
	void eat(){cout<<"吃学校的饭菜"<<endl;}
};

当我们实例化一个Student对象 Student stu;
然后调用 stu.eat();
则会执行Student类中定义的成员函数
“吃学校的饭菜”

如果我们要调用People类中的eat
可以这样调用
stu.People::eat();
这样就会执行People中定义的成员函数

这种由于基类派生类同名而造成基类中的属性或者方法而导致无法直接调用基类属性或方法的关系叫做隐藏

二、is-a关系

基类和派生类的is-a关系,就是派生类对象也是一个基类对象

用上面People和Student的例子
可以理解为学生也是人

在程序中
我们可以用派生类对象实例化一个基类对象
我们也可以用基类指针指向派生类

举例

//沿用上面的People和Student

Student s1;
People p1= s1;	//用派生类实例化基类
People *p2 = new Student;//基类指针指向派生类对象

is-a的存储结构

在这里插入图片描述
当用子类对象给父类对象赋值,或者用子类对象初始化父类对象,该父类对象只能接收他们共同拥有的部分,子类对象独有的数据成员不会接收

在这里插入图片描述
当用父类指针指向子类对象的时候,只能访问他们共有的数据成员和成员函数,无法访问子类独有的数据成员和成员函数

注意:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值