我必须理解为什么这个 C++ 程序不起作用。还有许多其他错误,但我更正了它们。
#include <iostream>
using namespace std;
class X {
public :
X(int a) : a(a) {}
virtual void f(ostream& flot) const { flot << " X::f" << endl; }
virtual void g() const = 0;
private :
int a;
};
class Z : public X {
void h() const {cout << "Z::h" << endl;}
public :
Z() : X(0) {}
void f(ostream& flot) const override { flot << "Z::f" << endl;}
void g() const override {cout << "Z::g" << endl;}
};
void operator<< (ostream& flot, const Z& z ) { z.f(flot);}
int main() {
Z z;
cout << z << endl;
Z z2();
z2.h();
X* x1;
x1->f(cout);
z.h();
}
你不能写 cout << z << endl; 因为 z 不作为普通对象存在,是否正确?它是一种想象的物体吗?与构造并确实存在的 z2 相反。你能告诉我我是否正确吗?
而且我不明白为什么最后两行:
x1->f(cout);
z.h();
没有问题。我认为 x1 不存在(如 z)。那么为什么你可以为 x1 调用一个方法呢?
而对于 zh(),唯一的问题是 h 在此上下文中是私有的。但如果它在公共部分内部,那将不是问题。为什么 ???z不是虚构的,所以你不能对它使用任何方法吗?