class a
{
public:
a(int);
virtual ~a();
virtual void print();
int getNumber()
private:
int number;
};
class b : public a
{
public:
b(int);
virtual ~b();
};
class c : public b
{
public:
c(int);
virtual ~c();
virtual void print();
};
这些是表示cpp文件的标头。我在每个适当的cpp文件中实现了所有方法。 我使用这个代码并且它工作得很好,虽然我想知道b类是否也应该实现 print(就像那样:print(){}),因为在我看来,编程更好。 那么适当的方法是什么? 实施(即使没有必要)或不实施?
答案 0 :(得分:1)
面向对象编程中的整个继承点是你可以依赖于你不想重写的方法的超类实现。
答案 1 :(得分:0)
您应该只编写将由子类重载的函数。如果子类没有专门化给定的行为,那么在子类中编写父函数的副本将是不好的做法。这不仅浪费而且可能令人困惑,它也可能在以后某些时候导致错误。
考虑一下:我会称之为猴子的父类和我称之为泰山的子类。在Monkey类中,我将为Swing()定义一个函数。
现在,由于泰山是猴子的衍生物并学会像猴子一样在树上摇摆,所以没有必要编写泰山自己的Swing功能版本。但是,让我们说我确实写了它只是为了“完整”。现在我有2个例程要更新,如果我需要改变Monkey摇摆的方式:一个用于Monkey类,另一个用于Tarzan。更糟糕的是,如果我改变一只猴子将如何摆动并且忘记在泰山做出同样的改变,泰山将不再像猴子一样摆动,这将是出乎意料的并且可能是错误的。
结论:只在子类函数中编写代码,其中子类需要从已为父级定义的内容中进行特化。