尽量使用组合而不是继承。如果使用继承,只用public继承。 允许接口继承,尽量不使用实现继承。
以下是一个不推荐的继承和组合的使用示例:
class Base {
public:
void baseFunction() { /* 实现 */ }
};
class Derived : private Base { // 私有继承
public:
void derivedFunction() { /* 实现 */ }
};
class AnotherClass {
void function() {
Derived d;
d.baseFunction(); // 无法访问私有继承的基类成员
}
};
class Interface {
public:
virtual void interfaceFunction() = 0;
};
class Implementor : public Interface {
public:
void interfaceFunction() override { /* 实现 */ }
void additionalFunction() { /* 实现 */ }
};
class Client {
private:
Implementor implementorInstance; // 组合
public:
void clientFunction() {
implementorInstance.interfaceFunction();
}
};