c++中普通函数调用虚函数问题
今天去面试了,受打击鸟,下面是面试的一道题目(大概),不是很懂,忘解答....
class CA
{
public:
virtual void fun1()
{
cout<<"CA::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CA::fun2()"<<endl;
}
};
class CB:public CA
{
public:
virtual void fun1()
{
cout<<"CB::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CB::fun2()"<<endl;
}
};
void main()
{
CA *p =new CB();
p->fun1();
p->fun2();
}
上面代码输出是什么?有什么bug?如何解决?
我的回答是:因为CA中fun2不是虚函数,而CA *p =new CB()时会进行类型转换,所以输出的结果是
CB::fun1()
CA::fun1()
CA::fun2()
后面被面试官问的很狼狈啊,他的问题大概是:有什么bug,是编译过程、链接过程还是运行过程中会出现问题?
回来后自己运行了下程序,得到的结果是
CB::fun1
CB::fun1
CA::fun2
忘高手详细分析,谢谢
class CA
{
public:
virtual void fun1()
{
cout<<"CA::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CA::fun2()"<<endl;
}
};
class CB:public CA
{
public:
virtual void fun1()
{
cout<<"CB::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CB::fun2()"<<endl;
}
};
void main()
{
CA *p =new CB();
p->fun1();
p->fun2();
}
上面代码输出是什么?有什么bug?如何解决?
我的回答是:因为CA中fun2不是虚函数,而CA *p =new CB()时会进行类型转换,所以输出的结果是
CB::fun1()
CA::fun1()
CA::fun2()
后面被面试官问的很狼狈啊,他的问题大概是:有什么bug,是编译过程、链接过程还是运行过程中会出现问题?
回来后自己运行了下程序,得到的结果是
CB::fun1
CB::fun1
CA::fun2
忘高手详细分析,谢谢
...全文
相关推荐
c++虚函数使用
c++虚函数.C++中的虚函数的作用主要是实现了多态的机制。
C++继承中的普通函数,纯虚函数、虚函数
C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别 1.普通函数(no-virtual) 普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数。 普通函数是父类为子类提供的“强制实现”。 因此,在继承关系中,子类不应该重写父类的普通函数,因为函数的调用至于类对象的字面值有关。 2.纯虚函数(pure virtual) C++中包含纯虚函数的类,被称为是...
C++面试常见问题
正在找工作,集中了多个c++面试问题,感觉很有帮助,分享给大家。
深入理解c++中virtual关键字
本篇文章主要是对c++中virtual关键字进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
C++模拟试卷(四).docx
。。。


