【发布时间】:2020-09-30 07:29:47
【问题描述】:
考虑下面的代码
class A {
int x, y;
public:
A(){}
virtual void PrintSize(){ cout << sizeof(typeof(*this)) << endl; }
};
class B : public A {
int a, b, c;
public:
B(){}
};
int main() {
A obja;
B objb;
obja.PrintSize();
objb.PrintSize();
}
“PrintSize()”的目的是获取我们从中调用它的当前类的大小。发生的情况是 this-keyword 引用了类 A,即使我们是从 B 调用它。我们不希望这样,因为我们需要这个函数对子类是通用的。
我们显然可以为每个类逐字重新定义函数。由于有太多不必要的行,代码将变得更难处理。更不用说将函数重新编写到每个类都会破坏最初派生它的目的。
这是我的临时修复:
class A {
public:
virtual void PrintSize(){ cout << sizeof(typeof(*this)) << endl; }
};
class B : public A {
public:
virtual void PrintSize(){ cout << sizeof(typeof(*this)) << endl; }
};
class C : public A {
public:
virtual void PrintSize(){ cout << sizeof(typeof(*this)) << endl; }
};
class D : public A {
public:
virtual void PrintSize(){ cout << sizeof(typeof(*this)) << endl; }
};
【问题讨论】:
-
什么是
typeof? -
我不认为
typeof是 C++ 中的东西。我相信这是一个 GCC extension。 -
哦,我不知道这一点。我一直用 gcc 编程,所以我认为这是一个 c++ 的东西。
标签: c++ class inheritance gcc typeof