C++ 为什么我可以用孙子对象调用祖父母方法?我读到这是不可能的
这是我从网上得到的密码。。。 虚拟关键字是如何工作的? 我认为这个虚拟关键词与这种行为有关,但我不明白它是什么C++ 为什么我可以用孙子对象调用祖父母方法?我读到这是不可能的,c++,class,inheritance,methods,virtual,C++,Class,Inheritance,Methods,Virtual,这是我从网上得到的密码。。。 虚拟关键字是如何工作的? 我认为这个虚拟关键词与这种行为有关,但我不明白它是什么 class A { int x; public: A(int i) { x = i; } void print() { cout << x; } }; class B : virtual public A { public: B() : A(10) { } }; class C : virtual pub
class A {
int x;
public:
A(int i) { x = i; }
void print() { cout << x; }
};
class B : virtual public A {
public:
B()
: A(10)
{
}
};
class C : virtual public A {
public:
C()
: A(10)
{
}
};
class D : public B, public C {
};
int main()
{
D d;
d.print();
return 0;
}
A类{
int x;
公众:
A(inti){x=i;}
无效打印(){cout
为什么我可以用孙子对象调用祖父母方法
因为这就是继承的工作原理。这个成员函数是由子类和子级继承的
我读到这是不可能的
要么你读的是错的,要么你误解了
虚拟关键字是如何工作的
当一个虚拟基准在层次中多次出现时,这些出现将合并到一个基准子对象中
在D的情况下,B的基A和C的基A是同一个基,如果继承不是虚拟的,就不会是这种情况。你的假设可能是正确的,但不是那么容易
print
被声明为public
成员函数。由于您使用public
派生每个类,因此仍然可以从D
类对象调用print
如果你想要你所描述的行为,一种方法是,你必须重写你的课堂
class A {
int x;
public:
A(int i) { x = i; }
private:
void print() { cout << x; }
};
A类{
int x;
公众:
A(inti){x=i;}
私人:
void print(){cout你从哪里获取代码的?你从哪里读到不能调用祖父母方法的消息?请格式化你的代码。你在这里混淆了一些东西。其中之一是。你能提供这个假设的来源吗?