#include <iostream>
using namespace std;
class x { };
class y : virtual public x
{
public:
virtual void f1() { cout << "woekd"; };
protected:
y();
~y();
};
class z : virtual public y
{
public:
virtual void f1() { cout << "woekd"; }
protected:
z();
~z();
};
class saa : virtual public z
{
public:
virtual void f1();
protected:
saa();
~saa();
};
int main()
{
saa *a1 ;
a1->y::f1();
}
答案 0 :(得分:0)
a1
是一个未初始化的指针。它并不指向任何地方。使用它会导致不确定的行为。
您只能取消引用指向有效对象的指针。
在您的示例代码中,实际上无法创建saa
,因为它具有受保护的构造函数。您必须从saa
派生一个类,创建该实例,然后使a1
指向该实例。
答案 1 :(得分:0)
您没有初始化a1
...所以取消引用它有未定义的行为。
使用运算符new
或在stak上分配。