#include <iostream>
using namespace std;
class B
{
public:
int t;
virtual int & fun() {cout << "!"; return t;}
virtual const int & fun() const {cout << "a";return t;}
};
class C : public B
{
public:
int k;
const int & fun() const { cout << "d" ; return k;}
};
int main(void)
{
B *t = new C();
t->fun();
return 0;
}
程序说明:
class B 里定义了两个虚函数 fun,他们的返回值类型不同,其中一个是常成员函数,可是他俩似乎不满足函数重载的要求:形参不同……
class C 以public继承了class B ,定义一个函数 fun
main函数里声明了一个B类的指针t,指向的是C类的实例。
--------------------------------------------------
以上代码在vs2010下可以编译通过。
大家来猜下程序输出吧 ..
如果可以的话顺便解释下为什么是这个输出,以及为什么能通过编译啊尼玛……c++神坑
using namespace std;
class B
{
public:
int t;
virtual int & fun() {cout << "!"; return t;}
virtual const int & fun() const {cout << "a";return t;}
};
class C : public B
{
public:
int k;
const int & fun() const { cout << "d" ; return k;}
};
int main(void)
{
B *t = new C();
t->fun();
return 0;
}
程序说明:
class B 里定义了两个虚函数 fun,他们的返回值类型不同,其中一个是常成员函数,可是他俩似乎不满足函数重载的要求:形参不同……
class C 以public继承了class B ,定义一个函数 fun
main函数里声明了一个B类的指针t,指向的是C类的实例。
--------------------------------------------------
以上代码在vs2010下可以编译通过。
大家来猜下程序输出吧 ..
如果可以的话顺便解释下为什么是这个输出,以及为什么能通过编译啊尼玛……c++神坑