来自 Bruce Eckel 的代码,用 C++ 思考
class A {
int i;
public:
A(int ii) : i(ii) {}
~A() {}
void f() const {}
};
class B {
int i;
public:
B(int ii) : i(ii) {}
~B() {
void f() const {}
};
class C : public B {
A a;
public:
C(int ii) : B(ii), a(ii) {}
~C() {} // Calls ~A() and ~B()
void f() const { // Redefinition
a.f();
B::f();
}
};
int main() {
C c(47);
}
对于他说的这个代码,
函数 C::f( ) 重新定义了它继承的 B::f( ),并且还调用了基类版本。此外,它调用 af()。请注意,您唯一可以谈论重新定义函数的时间是在继承期间。使用成员对象,您只能操作对象的公共接口,而不能重新定义它。
他什么意思 ?
该函数C::f()
只是通过范围解析运算符调用f()
。B
这是因为它是继承的,并且同名的函数也存在于C
. A
的函数f()
是通过类中定义的对象调用的C
。
f()
那么,正如 Eckel 所说,功能的重新定义在哪里?