由于在基类Base的定义中,f( )函数使用了virtual关键字,因此它是虚函数,即具有多态性,所以通过指针p调用的f( )是派生类Derived中定义的 f( )。而g( )不是虚函数,所以通过指针p调用的是Base中定义的g( )。由此可见,最终输出的结果是“f+g0+”。故本题应该选择C。
29 有时候我们需要将所有子类方法中都会执行的代码放到基类方法中,或者可能这些代码是操作基类成员的本来就不应该放在子类,在Java中可以通过super来调用被覆盖掉的父类中的方法。 我居然以为C++无法实现这一点,实在是太无知了。Google之后才知道原来可以这样用 1 #include <iostream> 2 using namespace std; 3 4 c...
虚函数的意义就是,对于当前对象的实际类型,去向上查找最近的该函数的实现。这跟虚函数的调用出现在哪个...
当然这里指的是虚函数。 答案是:用取内容运算符*获得派生类对象,然后再强制转换成基类的对象,用它去调用即可。 ps. 同样的,在多态情况下,用基类指针new一个派生类对象,基类和派生类都会初始化一个对象,然后各自维护。 在用指针去调用数据成员、非虚成员函数时,两者完全相同。 唯一区别是,在多态时,基类指针调用...
就是自己在调用自己呀,没有指明调用的是基类的虚函数,自动认为是调用派生类的虚函数,然后就再次调用了,一直进行下去了 struct A { virtual void foo(void) { } } struct B: public A { void foo(void){ foo(); // 递归调用自己,即 B::foo()A::foo(); // 明确告诉编译器,调用的是 ...
首先,我们用一句在程序员中比较流行的话作为本文的开篇:如果你在基类的构造函数中调用虚函数,那么在基类构造期间,虚函数的行为像一个“实”函数。 在派生类对象的基类部分构造期间,对象的类型是base class,而不是derived class。这时,不只是虚函数会被编译器解析至基类型,就连RTTI中的typeid和dynamic_cast也会把对...
派生类中没有定义虚函数,当基类指针变量指向派生类对象时,将调用基类的虚函数。A.正确B.错误的答案是什么.用刷刷题APP,拍照搜索答疑.刷刷题(shuashuati.com)是专业的大学职业搜题找答案,刷题练习的工具.一键将文档转化为在线题库手机刷题,以提高学习效率,是学习的生产力工具
在类B中你没有声明相应的函数,所以在函数决议阶段就失败了。还没有到运行时,虚函数分发阶段。
假设构造函数中调用虚函数,表现为普通的虚函数调用行为,即虚函数会表现为相应的子类函数行为,并且假设子类存在一个成员变量int a;子类定义的虚函数的新的行为会操作a变量,在子类初始化时根据构造函数调用顺序会首先调用父类构造函数,那么虚函数回去操作a,而因为a是子类成员变量,这时a尚未初始化,这是一种危险的行为,...
void func() override { cout << "Derived::func()"<< endl; } }; int main() { Derived d; return 0; } 在这个示例中,基类的构造函数会调用派生类的虚函数,导致输出结果不符合预期。为了避免这种情况,可以采用上述方法之一来重新设计代码。