C++——同名隐藏 和 赋值兼容规则
2024-08-27 00:49:05
同名隐藏
一旦子类定义了与父类同名的方法,则父类里面该名字的所有方法都被隐藏了。必须显示指定是父类的方法才可以
#include<iostream>
using namespace std; class Base
{
public:
Base() :x()
{}
~Base()
{}
void show()
{
cout << "This is Base show" << endl;
}
void show(int n)
{
cout << "This is Base show" << n << endl;
}
private:
int x;
}; class D :public Base
{
public:
D() :y()
{}
~D()
{}
void show()
{
cout << "This is D show" << endl;
}
private:
int y;
}; void main()
{
D d;
d.show();
d.Base::show();
}
赋值兼容规则
在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况:
①派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。
Base b;
D d;
b = d;
d = b;//不能赋值
对象切片
②可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不能反过来做。
D d;
Base *pb = &d;
pb->show();
pb->show();
pb->list();//访问不了
pb只能访问Base这个父类内部的方法。不能访问子类里面的show和list
③派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。
D d;
Base &rb = d;
rb.show();
rb.show();
rb.list();//访问不了
最新文章
- MySql索引总结
- FilterDispatcher已被标注为过时解决办法 >;>;>; FilterDispatcher <;<;<; is deprecated!
- scala 学习: 逆变和协变
- ASP.NET MVC 应用提速的十种方法
- PHP trim()函数的一些用法
- Oracle内存组件理论篇一
- SpringMVC最基础配置
- Bluetooth 4.0之Android 解说
- 安卓各文件存储路径汇总(Android file path)
- GO不支持数组通过函数参数更改,有点不一样
- Swift中的设计模式
- 02 nodejs命令参数(NodeJS基础入门)
- 列举一些 MacBook Pro 必需的外设和应用程序推荐
- Java中关于string的些许问题及解析
- npm2 与 npm3的包版本管理
- mysql 将行拼接成字符串的方法
- fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory(转)
- Android 上传文件,图片。以及服务器端接收相关。
- SpringBoot(四)_Spring Data JPA的使用
- day05<;Java语言基础--数组>;
热门文章
- PhpStorm文本选择范围的纵向起始位置可选
- [ kvm ] 学习笔记 1:Linux 操作系统及虚拟化
- 解​决​H​T​M​或​H​T​M​L​的​图​标
- MySQL 过滤复制+复制映射 配置方法
- request.GET、request.POST、request.body(持续更新)
- ubuntu18.04 阿里镜像源
- oracle加密--wallet
- csdn博客整理
- 字典的学习3——嵌套——Python编程从入门到实践
- 爬虫探索Chromedriver+Selenium初试