【发布时间】:2015-01-03 01:38:45
【问题描述】:
每当我从基类派生一个新类时说:
#include <iostream>
class A {
protected:
int f;
public:
void get() {
std::cout << "The address is: "
<< &f << std::endl;
}
};
class B : public A {
// ....
};
int main() {
A a;
a.get();
B b;
b.get();
return 0;
}
地址是:0xbfb0d5b8
地址为:0xbfb0d5bc
这是否意味着class A 中的所有代码都将复制到class B?由于我在 B 类中什么都没有,即没有数据成员或函数所以,当我创建 B 类的一个实例时,我发现它在不同的地址有自己的变量,它也有一个成员函数。不复制怎么会有自己的复制成员呢?
这就是我们所说的代码重用在继承中的意思吗?
编辑:
更新了我的代码以反映我所说的复制变量的含义。
【问题讨论】:
-
如果你问编译后的程序是否包含两次相同的函数代码(二进制形式):否。
-
更好的表达方式是A类中的代码也被B类使用。但是没有发生复制,它们使用相同的代码副本。
-
@user963241:您没有将任何东西声明为静态,每个类的每个实例都会使用不同的变量...
-
@user963241 class 不包含成员,它的实例包含。每个实例都有自己的成员变量。类定义就像一个实例的蓝图。
-
在你的例子中,试试
A a1; a1.get(); A a2; a2.get();
标签: c++ inheritance code-reuse