c++继承与多态(下)

派生类同名处理

隐藏redifine

        当我们在派生类中写了一个与基类同名、同参的成员方法时,编译器不会报错,当我们通过派生类定义的对象去访问重名函数时,会访问到派生类的那个函数,这种现象叫做“重定义”有时候也叫“隐藏”,实际上在派生类中两个函数都存在,只是在不同类域名中,新成员方法会隐藏掉旧方法,这个是当然,如果旧方法隐藏新方法,那还要新方法干嘛。

访问被隐藏成员的方法       

        如果想要访问被隐藏的方法,可以将派生类强制转换成基类的类型,再去调用,编译器会以为是基类在调用,就能访问到,这种方法很少会这么操作,另外一种方法就是在派生类内部,使用作用域符号来指定访问,“父类::方法”的语法可以调用到,示例如下。

void man::get_name(void)
{
       cout << name<<endl;  //完整是this->name,也可以写man::name
       cout << person::name << endl;//只能person::name访问隐藏的name。
      spek();  //完整是this-> spek( ); 可以写成man::spek
      person::spek(); //访问person中的spek方法
}

        在派生类中使用“父类::方法”的语法除了可以指定访问方法的作用域,也可以指定变量的作用域,同样用来解决变量名重名问题。隐藏本质上是大小作用域内同名变量的认领,就像局部变量与全局变量重名后,函数内部访问的是局部变量,也可以说是局部变量隐藏了全局变量,实际上两个变量都存在与内存中。

派生类与基类的兼容规则

        在c/c++中long int 兼容int兼容short int,而int与float虽然内存大小相同,但是他们完全不兼容,这就是普通变量的兼容规则。

        派生类中包含了基类,所以他们之间有关联,但这个关联不是简单的向普通变量那样的兼容特性,使用cast关键字,可以将派生类对象中部分内容裁剪掉,留下基类的内容,考虑到指针和引用后,派生类和基类的访问规则就是所谓兼容规则。

基类的指针可以访问派生类的变量,如下示例

int main(void)
{
       man  a;         //man类继承了person类,创建一个a对象
       person  *p = &a; //使用基类person指针指向派生类man的对象a
       p->print();       //调用speak
}

不良继承

       继承就是为了代码复用,继承方式很适合用来做框架设计,一层层向下剥离,然而继承时

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值