【发布时间】:2014-02-03 22:19:58
【问题描述】:
C++ 纯虚类的奇怪行为
请帮助该死的 C++ 初学者更好地理解纯虚拟类。
我尝试了一个 C++ 虚拟的简单示例,但不确定结果。 如果我在另一种编程语言中尝试与 java 相同的操作,例如输出将是
期望/预期输出
1 -> 推文
2 -> 推特
但是,这里的输出是
实际输出
1 -> 喵喵
2 -> 推特
这是为什么呢? 似乎动物类的 operator= 没有效果。 那是因为调用了动物类的标准 operator= 而它什么都不做? 如何在不使用指针的情况下实现类似于 java 的行为? 这可能吗?
下面是尽可能简化的代码示例:
代码
#include <string>
#include <iostream>
using namespace std;
class Animal
{
public:
virtual string test() const = 0;
};
class Cat : public Animal
{
public:
virtual string test() const
{
return "Meow";
}
};
class Bird : public Animal
{
public:
virtual string test() const
{
return "Tweet";
}
};
void test_method(Animal &a)
{
Bird b;
a = b;
cout << "1 -> " << a.test() << endl;
cout << "2 -> " << b.test() << endl;
}
int main(int args, char** argv)
{
Cat c;
Animal &a = c;
test_method(a);
return 0;
}
【问题讨论】:
-
-
是的! Object slicing
-
C++ 引用与 Java 引用有很大不同。如果你想要类似于 Java 引用的东西,你必须使用 C++ pointers.
标签: c++ inheritance reference virtual