C++中,爷类跟父类有相同的函数,用子类对象调用时会产生两义性吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中,爷类跟父类有相同的函数,用子类对象调用时会产生两义性吗?相关的知识,希望对你有一定的参考价值。

爷类本身有这个函数。父类本身也有与爷类相同的函数。

那么子类如 C c ; 然后调用这个函数如: c.hello();

这样调用的是哪个函数呢?会产生两仪性吗

参考技术A 继承中,
子类和父类有相同名称,相同参数的函数,
就相当于在子类中已经覆盖了父类的这个函数。

你上边说的例子中,
父类已经把爷类的同名函数给覆盖掉了,
所以如果直接使用,
子类中调用的函数必定是父类中的函数。
不会产生二义性。
参考技术B 一般来说,如果爷类和父类有相同名称的函数,会将该函数申明为虚函数。
你这个问题,不管这个函数是不是虚函数都会调用父类的函数。因为子类调用某个函数,首先在自己的函数表中查找,如果没有,则到父类中去找;如果找不到,则到父类的父类中去找……本回答被提问者采纳
参考技术C c++不允许多继承.所以你子类继承了父类,调用的当然是父类的hello函数. 参考技术D 子类重写了就调用了子类自己方法.
没重写都是一样继承的父类,没什么区别.

关于C++父类与子类之间变量的问题

假如父类有两个变量,父类有两个子类继承这两个变量,现在我想让这两个子类中继承的变量变为静态的该怎么办呢,而且在这两个子类在继承父类变量时赋值的都不一样

参考技术A 不可以改变继承的变量的控制权限,从静态变成局部,从局部变成静态,即使是public和protected,也只能从高到低。 参考技术B #include<stdio.h>
class father

public:
int a,b;
;

class sn1 :public father

public:
static int a;
static int b;
;

int sn1::a = 10;
class sn2 :public father

public:
static int a;
static int b;

;
int main()
sn1 m_sn1; printf("[%d] \n",m_sn1.a);

return 0;

输出:[10]
你可以试一下。本回答被提问者和网友采纳

以上是关于C++中,爷类跟父类有相同的函数,用子类对象调用时会产生两义性吗?的主要内容,如果未能解决你的问题,请参考以下文章

java 中GregorianCalendar类跟Calendar类有啥本质的区别,以及都怎么用

关于C++父类与子类之间变量的问题

对象的继承访问控制

C++中,建立子类对象的时候,会调用基类的构造函数,

c++ 虚函数 如何调父类 而非子类

C#中子类构造函数中如何调用父类构造函数