虚拟,怎么用

Virtual, how to use it?

本文关键字:虚拟      更新时间:2023-10-16
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(){}),因为在我看来这是更好的编程。那么,怎样做才是合适的呢?实现(即使没有必要)还是不实现?

面向对象编程中继承的全部意义在于您可以依赖于您不想重写的方法的超类实现。

您应该只编写将要被子类重载的函数。如果子类没有专门化给定的行为,那么在子类中编写父函数的副本将是不好的做法。这不仅会造成浪费和潜在的混乱,而且还可能在以后的某个时候导致错误。

考虑一下:父类我将命名为Monkey,子类我将命名为Tarzan。在Monkey类中,我将为Swing()定义一个函数。

现在,由于泰山是猴子的衍生物,并且学会了像猴子一样在树上摇摆,所以没有必要编写泰山自己版本的swing函数。但是,假设我把它写下来只是为了"完整"。现在我有两个例程需要更新,如果我需要改变猴子摆动的方式:一个用于猴子类,另一个用于泰山。更糟糕的是,如果我确实改变了猴子的摆动方式,而忘记在泰山中做同样的改变,泰山将不再像猴子一样摆动,这将是意想不到的,而且可能是错误的。

结论:只在子类函数中编写代码,当子类需要从已经为父类定义的专门化时。