A
class A{
public:
int thisCoolFuntion(){
return 0;
}
};
thisCoolFuntion()
的类(我们称它为B
或C
类)B
或C
的实例,但是他没有
thisCoolFuntion()
。private
继承:class B : A{
public:
int member;
void setBMember(){
member = thisCoolFuntion();
}
};
private
类型的A
成员:class C{
A memberA;
int member;
public:
void setCMember(){
member = memberA.thisCoolFuntion();
}
};
int main(int argc, const char * argv[]) {
// insert code here...
B b;
b.setBMember();
//b.thisCoolFuntion(); --> Error!
C c;
c.setCMember();
//c.memberA.thisCoolFuntion(); --> Error!
return 0;
}
问题:
由于这两种方法都可以解决您的问题,所以问题的答案应该是您针对应用程序所针对的design pattern
。
继承表示两个类之间的is-a
关系,而合成表示两个类之间的has-a
关系。
用于类多边形的最佳设计将使用composition
,因为此语句有意义Polygon has a ordered sequence of Points
,但不适用Polygon is-a ordered sequence of Points
。用C ++术语:
class Polygon {
std::vector<Point> points;
};
虽然逻辑错误是例外:
struct logic_error : public exception { };
请参见Difference between Inheritance and Composition