《C++ 同名函数》同名隐藏与赋值

#include<iostream>
using namespace std;

class Base
{
public:
	Base():x(0)
	{}
	~Base()
	{}
public:
	void show()
	{
		cout<<"This is Base"<<endl;
	}
	void show(int)
	{
		cout<<"This is Base(int)"<<endl;//函数的重载概念
	}
private:
	int x;
};
class D:public Base
{
public:
	D():y(0)
	{}
	~D()
	{}
public:
	void print()
	{
		cout<<"This D print()"<<endl;
	}
	void show()
	{
		cout<<"This is D show()"<<endl;
	}
public:
	void list()
	{
		cout<<"This is D list()"<<endl;
	}
private:
	int y;
};
/*
void main()
{
	D d;
	d.print();
	d.show();//子类有show 父类也有show 但是调动子类 这叫子类同名隐藏
	//d.show(0);这个错误
	d.Base::show(0);//必须加限定  不然子类的方法会隐藏掉所有的父类的同名方法
	//这块表示为如果不加Base::限定,错误会显示无法找到有参数的show 方法
}
*/
void main()
{
	D d;
	Base b=d;//这块之后调动的也只能是父类的方法
	b.show();
	b.show(0);


}
/*
void main()
{
	Base b;
	D d;

	Base *pb;
	//1
	b=d;//子类能够给父类赋值,但是父类是不可以给子类赋值
	//2
	pb=&d;//Base *   D*
	pb->show();
	pb->show(0);
//	pb->list(); pb智能通过这个指针访问派生类中由基类继承来放入隐藏对象,不能访问派生类中的新成员

	Base &bf=b;
	bf.show();
	bf.show(0);
//	bf.list(); 不管是引用或者指针对于以上的函数调用都是一样 只能在父类中

}
*/

派生与基类:
在任何需要基类对象的地方都可以死用公有派生类的对象来代替,这条规则称 赋值兼容规则。它包括以下情况:
1- 派生类的对象可以赋值给基类的对象,这时把派生类对象中,从对应基类中继承来的隐藏对象赋值给基类对象。反过来不行,因为派生类的新成员五值可赋。
2-可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不能反过来做。
3-派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一个code杠精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值