upcast
class A {
public:
A():i(){}
int get_i() { cout << "A.get_i" << endl; return i; }
private:
int i;
};
class B :public A {
public:
B():j(){}
int get_i() { cout << "B.get_i" << endl; return ; }
void f() { cout << "B.i = "<< A::get_i() << " B.j = " << j << endl; }
private:
int j;
};
int main() {
A a;
B b;
A*pa = &b; //不把b当B看了,只取它A的特性。
pa->get_i();
pa->f(); //这是非法的!
return ;
}
不把b当B看了,而是把它当成一个A,只取它里面A属性的部分。
所以,pa->get_i()调用的实际上是A的get_i()
pa->f()是一个非法调用。因为A里面没有f函数。
upcast的更多相关文章
- Java多态:upcast和downcast
upcast例: public class Test { public static void main(String[] args) { Cup aCup = new BrokenCup(); aC ...
- 没有upcast 也不会发生多态
class A{ public: virtual void f(){ cout << "A::f()"<<endl;} }; class B:public ...
- 多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。
Influenced by <java 八荣八耻>,翻了下<java编程思想> 印象中多态产生的条件:1.子类继承父类 2.父类[指针]指向子类 3.父类引用调用重写(@Ove ...
- 多态Poly中的向上/下转型 Upcast/Downcast
[参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? jav ...
- 非virtual函数,用指针进行upcast
void print_func(A* p) { p -> print(); } int main() { A a(); B b(,); //a.print(); //b.print(); pri ...
- upcast 做了什么操作
把子类中仅仅继承而来的成员,赋值给父类. 但是,不会改变虚表!因为这个obj的类型没变. #include <stdio.h> using namespace std; class A{ ...
- C++ cast
excerpted from Type conversions K&R Section 2.7 p59 对type conversion 的解释: The precise meaning of ...
- Thinking in Java——笔记(19)
Enumerated Types Basic enum features When you create an enum, an associated class is produced for yo ...
- TIJ——Chapter Seven:Reusing Classes
Reusing Classes 有两种常用方式实现类的重用,组件(在新类中创建存在类的对象)和继承. Composition syntax Every non-primitive object has ...
随机推荐
- WordPress无法显示Gravatar头像的解决方法
最近捣鼓WordPress博客发现无法正常显示Gravatar头像,查找原因是因为国内屏蔽了Gravatar导致的,这导致无数国内Wordpress网站头像无法显示,并且影响到了相关页面的访问速度(如 ...
- 学习笔记之Everything
Everything (software) - Wikipedia https://en.wikipedia.org/wiki/Everything_(software) Everything is ...
- 时间同步chrony
时间同步chrony [root@compute02 ~]# yum install chrony 编辑配置文件 将sever区块下的内容修改为时间服务器的地址 .此处可以写局域网内的 ...
- 利用队列Queue实现一个多并发“线程池”效果的Socket程序
本例通过利用类Queue建立了一个存放着Thread对象的“容器对象”,当Client端申请与Server端通信时,在Server端的“链接循环”中每次拿出一个Thread对象去创建“线程链接”,从而 ...
- [UE4]自定义函数,快速增加输入参数的一种方法
- html 网页生产pdf文件
在nuget中安装组件 Install-Package CPechkin https://www.nuget.org/packages/CPechkin/ 根据html生产pdf文件 using Sy ...
- Hibernate JPA 关联关系
Hibernate JPA 关联关系: 使用cascade做级联操作(只有在满足数据库约束时才会生效): CascadeType.PERSIST: 级联保存,只有调用persist()方法,才会级联保 ...
- 用树莓派开Wifi热点
安装软件 首先设置软件源: vim /etc/apt/sources.list 查看软件源后面的版本,如果是wheezy,需要换成jessie wheezy是基于deb 7的版本 而现在是基于jess ...
- 释放linux的buff/cache
有个linux的服务器,2G内存的,今天登上去一看,内存竟然被占得满满的. ssh上去执行了free. free -m total used free shared buff/cache availa ...
- 软硬链接ln
1:软链接 -- 快捷方式 I:ln -s 文件名 快捷方式的名字 文件名:使用绝对路径 II':目录也可以创建链接 2:硬链接 I: ln 文件名 硬链接的名字