virtual public
&之间是否有任何区别public virtual
?如果是,那为什么呢? 示例:
class x {
protected: int a;
};
class y : public virtual x {
protected: int b;
};
答案 0 :(得分:2)
不,public virtual
和virtual public
之间没有区别,它们是两个不相关的说明符(一个确定继承关系的可见性,另一个确定关系是否为虚拟关系),可以是自由交换。
继承是虚拟的还是没有(如果D继承自B和C,它们都继承自A,那么虚拟继承意味着只有A的一个实例将存在并由B和C共享,而非 - 虚拟继承意味着将存在两个实例)。有时候,你想要一个实例,有时你想要两个实例。语言设计者必须选择默认值,并选择非虚拟继承,因此您需要明确要求虚拟继承。
答案 1 :(得分:0)
1。)const int和int const之间有区别吗?没有。 2.)具有虚函数的类称为多态类。我建议你在这里阅读: http://www.geekinterview.com/question_details/51645
答案 2 :(得分:0)
不记得。但优先遵循惯例(参考:MSDN)
virtual [type-specifiers] member-function-declarator
virtual [access-specifier] base-class-name
以下链接可以很好地解释您在上面列出的示例http://www.parashift.com/c++-faq-lite/multiple-inheritance.html
对于新手C ++程序员,http://www.parashift.com/c++-faq-lite/index.html#table-of-contents是一个很好的参考点
答案 3 :(得分:0)
了解虚拟和非虚拟继承检查(并尝试理解)代码之间的区别:
#include <iostream>
using namespace std;
struct Base {
int a;
};
struct D11 : virtual Base {};
struct D12 : virtual Base {};
struct D21 : Base {};
struct D22 : Base {};
struct E1: D11, D12 {
std::pair<int, int> func(int i1, int i2){
dynamic_cast<D11*>(this)->a = i1;
dynamic_cast<D12*>(this)->a = i2;
return std::pair<int, int>(dynamic_cast<D11*>(this)->a, dynamic_cast<D12*>(this)->a);
}
};
struct E2: D21, D22 {
std::pair<int, int> func(int i1, int i2){
dynamic_cast<D21*>(this)->a = i1;
dynamic_cast<D22*>(this)->a = i2;
return std::pair<int, int>(dynamic_cast<D21*>(this)->a, dynamic_cast<D22*>(this)->a);
}
};
int main(){
E1 e1;
E2 e2;
std::pair<int, int> p1, p2;
p1 = e1.func(1,2);
p2 = e2.func(3,4);
cout << "p1: " << p1.first << ", " << p1.second << endl; // Will return p1: 2, 2
cout << "p2: " << p2.first << ", " << p2.second << endl; // will return p2: 3, 4
return 0;
}
如果你想象它会更容易理解:
有时候有可能在不同的基础上存储不同的变量值。有时相反。 C ++让你选择。