当我还是一名学生时,我已经使用 C++ 进行了一段时间的开发,但我从未在任何项目中使用 C++ 中的虚拟类或外部。我最近才读到这两个,希望有人能更好地了解它们的用法。
虚拟类的目的是什么?可以在哪里使用/实现它的示例。我在 IBM 网站上对它进行了一些掩饰,并编写了一个测试程序来查看它的运行情况,但是什么时候使用虚拟类比较好?
extern 也是如此。我看到了一个例子,并用 C++ 为自己做了一个测试,但是使用 extern 而不是使用头文件的优势是什么?头文件而不是 extern 的优势是什么?
最佳答案
虚拟类适用于遇到 dreaded diamond 时.例如:
struct Base { int x; };
struct D1 : Base {};
struct D2 : Base {};
struct Derived : D1, D2 {};
这里,Derived
实际上有两个 Base
部分,因此 两个 成员变量称为 x
。它会编译,但在通过其基类之一操作 Derived
对象时,您可能会遇到一些意外行为。
Derived derived;
D1& d1 = derived;
D2& d2 = derived;
d1.x = 1;
d2.x = 2;
cout << d1.x << d2.x << endl; // 12 !
虚拟继承通过使 Derived
从 Base
派生仅 一次 解决了这个问题。
struct Base { int x; };
struct D1 : virtual Base {};
struct D2 : virtual Base {};
struct Derived : D1, D2 {};
这里,Derived
只有一个Base
部分,和一个名为x
的成员变量。
关于c++ - C++中虚类和extern的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189667/