C++学习10向上造型和多态性(1)

注意:本笔记来自于网易云课堂公开课内容
class A

{

public: int I;

      A():i(10){}

};

class B:public A{};

 

int main(){

A a;

B b;

cout<<a.i<<” ”<<b.i<<endl;

cout<<sizeof(a)<<” “<<sizeof(b)<<end;;

int * p=(int*)&a;

cout<<p<<” “<<*p<<endl;

*p=20;

cout<<a.i<<endl;

p=(int*)&b;

cout<<p<<” ”<<*p<<endl;

return 0;

 

 

}

输出:

10 10

4 4

0xxxx 10

20

0xxxx 10

 ---------------------

class A

{

public: int I;

      A():i(10){}

};

class B:public A

{

private: int j;

public:

B:j(30){}

public:

     void f(){

       cout<<”B.j=”j<<endl;

 

}

};

 

int main(){

A a;

B b;

cout<<a.i<<” ”<<b.i<<endl;

cout<<sizeof(a)<<” “<<sizeof(b)<<end;;

int * p=(int*)&a;

cout<<p<<” “<<*p<<endl;

*p=20;

cout<<a.i<<endl;

p=(int*)&b;

cout<<p<<” ”<<*p<<endl;

p++;

*p=50;

return 0;

}

输出

10 10(这里还是i的值)

4 8(size会变)

0xxxx 10

20

0xxxx 10

B,j=50;

子类有指针就可以访问了父类的

upcasting:子类当成父类来用(向上造型,造型:数据没丢,只是当父类看了)

eg:

manager pete(“pete”,”444-555”,”bakery”);

Employee*ep=&pete;//upcast

Employee&er=pete;//upcast

此时ep就当基类来用了

 --------------------------

多态性

圆形、椭圆形、矩形

 

shape类,可以派生出各种类

virtual有,则子类和父类的同名函数有关系。

render定义一个shape类型的指针

指针的对象去做render,所以render是个通用函数,对任何shape类的子类都是适用的

virtual类型的函数表面,这个函数在使用的时候才知道是什么类型的对象。

 

在func中render(&ell)是调用ell的render

render(&circ)是调用circle的render

这里p是多态的

p指的是谁,就是谁的形态

 

多态性是建立在upcast的基础上(但要有virtual)

dynamicbinding动态绑定:该调用哪个函数是运行的是才知道的。

 

p的类型是shape*(静态类型)

p当时指的类型是动态的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值