虚函数与多态性(一)

多态性有两种静态多态性和动态多态性,
静态多态性是指调用同名函数,由于参数的不同调用不同的同名函数;
动态多态性是指不同对象调用同名函数时,由于对象不同调用不同的同名函数。

静态联编和动态联编

  1. 联编是指一个程序模块、代码之间互相关联的过程。
  2. 静态联编,是程序的匹配、连接在编译阶段实现,也就是说在你写完代码的时候,程序的运行顺序就已经确定了,也称为早期匹配。 重载函数使用静态联编
  3. 动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编。动态联编主要依赖虚函数和基类指针。(具体怎么解释我还没想好) switch 语句和 if 语句是动态联编的例子(?)。虚函数重载使用动态联编。
  4. 重载的意思就是同名,但是实现功能不同(参数的类型和数量有参的时候不一样,无参的时候就只能基类与派生类之间允许同名,否则在同一个函数作用域中写,就相当于函数重定义,会报错的)
    普通成员函数的重载可以分为两种形式:即有参和无参,同一类和派生类中。
    有参的在同一类中直接看参数类型与个数,在基类与派生类中若是参数类型与个数不相同,直接看即可;若是相同就用作用域运算符或类对象的名字直接加以区分。
    无参的同一类中写了几个函数名相同,没参数,会报错;在基类与派生类中(这应该也许叫做重定义函数)还是老一套的用作用域运算符或类对象的名字直接加以区分。(主要是因为同名,因为类对象调用的时候显示的是,例如:a.show(),这样就对函数的返回类型要求基本没有,主要针对名字和参数)

类指针的关系

  1. 基类指针和派生类指针与基类对象和派生类对象4种可能匹配:
    直接用基类指针引用基类对象;
    直接用派生类指针引用派生类对象;
    用基类指针引用一个派生类对象;
    (指针的访问能力高于对象能力)
    用派生类指针引用一个基类对象。
    (指针的访问能力低于对象能力)
  2. 用基类指针引用派生类对象
    使p成为基类指针,A是基类,B是派生类。
    利用 p,可以访问B_obj 的所有从 A 类继承的元素 ,
    但不能用 p访问 B 类自定义的元素 (除非用了显式类型转换)(也就是对基类指针进行强制类型转换)
class  A_class
{
         char name[20] ;
    public :    void  put_name( char * s ) {
    strcpy( name, s ) ; }
                    void  show_name() {
    cout << name << "\n" ; }
};
class  B_class  : public  A_class
{
         char phone_num[ 20 ] ;
    public :    void  put_phone( char * num )  {
    strcpy ( phone_num , num ) ; }
                    void  show_phone()  {
    cout << phone_num << "\n" ; }
};
void main()
{
    A_class  * A_p ;      A_class  A_obj ;
   B_class   B_obj ;  
   A_p = & A_obj ; 
   A_p -> put_name( "Wang xiao hua" ) ;   A_p -> show_name() ;
   A_p = & B_obj ;
   A_p -> put_name( "Chen ming" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

如果树上有叶子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值