您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 对virtual又有些迷惑了

对virtual又有些迷惑了

来源:网络整理     时间:2016/9/2 8:42:11     关键词:

关于网友提出的“ 对virtual又有些迷惑了”问题疑问,本网通过在网上对“ 对virtual又有些迷惑了”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 对virtual又有些迷惑了
描述:

#include
#include
using namespace std;
class A
{
public:
void fA() { cout<<"A::fA"<<>
virtual void vfA() { cout<<"A::vfA"<<>
};
class B:public A
{
public:
void fB() { cout<<"B::fB"<<>
void vfA() { cout<<"B::vfA"<<>
};
class C:public B
{
void fC()  { cout<<"C::fC"<<>
void vfA() { cout<<"C::vfA"<<>
};
int main()
{
A *p=new C;
p->vfA();
system("pause");
return 0;
}

说说看你认为的答案是什么,先谢谢大家。
解决方案1:

引用 10 楼 zhangtonghui816 的回复:
引用 4 楼 amoyman 的回复:是 C::vfA没错的。
我以为C继承B,B中vfa不是virtual 我以为输出B::vfA呢

只要基类写了vfA是virtual,继承类中vfA就始终是virtual,不管继承类声明时写不写virtual 解决方案2:

类C都重定义了
void vfA() { cout<<"C::vfA"<<>

不管如何都会输出C::vfA;

解决方案3:

如果不是 C::vfA才不好理解呢。
你试试这段(A,B,C定义不变,只更改main)


int main()
{
    A a1, a2;
    B b1, b2;
    C c1, c2;
    A* p[6] = {&a1, &a2, &b1, &b2, &c1, &c2};
    for (int i = 0; i < 6; ++i)
    {
        p[i]->vfA();
    }
    system("pause");
    return 0;
}

这是虚函数的强大的功能和作用之一吧。 解决方案4:

是 C::vfA没错的。

解决方案5:

C::vfA

解决方案6:


//不建议的写法:
A* p = new C;
//建议的写法:
A* p = new C();
解决方案7:

运行一下就知道:

C::vfA
Press any key to continue
解决方案8:

有什么疑问?


以上介绍了“ 对virtual又有些迷惑了”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3716898.html

相关图片

相关文章