【发布时间】:2015-07-17 22:10:05
【问题描述】:
在学习 C++ 中的多态性教程时,我发现一些代码在调用非覆盖的虚拟方法时表现异常。以下是课程:
// classes.cpp
namespace Classes
{
class C
{
public:
virtual bool has_eyesight()
{
return false;
}
} c;
class See : public C
{
public:
bool has_eyesight() override
{
return true;
}
} si;
}
这里是主要方法:
// file.cpp
#include <iostream>
#include "classes.cpp"
using std::cout;
using std::endl;
using Classes::C;
using Classes::See;
int main()
{
See& si = Classes::si;
cout << si.has_eyesight() << endl;
C& c = si;
cout << c.has_eyesight() << endl;
c = Classes::c;
cout << c.has_eyesight() << endl;
}
此代码在运行时将打印1 1 1 (true true true);如果 c.has_eyesight() 引用的是 C 而不是 See,它不应该返回 false 吗?
(如果这听起来很幼稚,请原谅我,我刚开始学习 C++。)
【问题讨论】:
-
c= 类::c;没有做你认为的事情。
-
@tp1 那它有什么作用呢?你能在答案中解释一下吗?
标签: c++ reference polymorphism virtual