C++ 当子类的方法和父类的方法重名时...

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 当子类的方法和父类的方法重名时...相关的知识,希望对你有一定的参考价值。

C++当子类的成员函数与父类的成员函数重名时:

 

若父类没有virtual声明,子类函数可以和父类函数返回值不同,但函数名和参数列表必须相同.

则子类实例通过"."调用的是子类的函数

若子类想调用父类的函数,则需要使用 子类实例.父类::函数名() 的形式.

父类实例通过"."调用的是父类的函数

父类无法调用子类的同名函数

 

若通过指针->调用

则指针的类型 决定 调用哪个类的函数

父类地址强制转换为子类指针 也可以调用子类的函数.

 


 

若父类有virtual声明,

虚函数就固定了函数的形式,所以子类函数和父类函数的返回类型也必须一致,否则报error: conflicting return type specified for ‘virtual int CDerive::show()’

 

则通过"."调用时,

子类实例调用子类函数,父类实例调用父类函数.

 

若通过"->"调用时,

则多态性成立,即当使用基类指针通过->调用时,根据指针的内容确实是基类地址还是子类地址,分别调用对应的函数.子类地址赋给父类指针,默认调用的是子类的函数,但可以通过 父类指针->父类::函数名()  明确调用父类的函数.

 

当用子类指针通过->调用时,将父类地址强制转换为子类指针,则默认调用的仍然是其本质的函数 即 父类的函数 可以通过 子类指针->子类名::函数名() 强制调用子类的函数.

将子类指针指向子类实例地址时,默认调用子类函数,可以通过 子类指针->父类名::函数名() 强制调用父类的函数.

 

当参数不一样时,则是两个函数,

此时通过->调用函数 取决于指针变量的类型决定调用哪个函数 而与其实质值无关.

子类类型的指针可以通过 子类指针->父类名::函数名() 强制调用父类函数.

 

以上是关于C++ 当子类的方法和父类的方法重名时...的主要内容,如果未能解决你的问题,请参考以下文章

java继承

22.1 Extends 继承的 方法重写@Override的使用

子类如何访问父类

方法重名

十面向对象之多态

重写override