在派生类中定义函数

时间:2014-03-03 10:54:23

标签: c++ subclass virtual-functions base-class

假设我有一个基类水果和三个派生类说Apple,orange和mango。现在我想在Apple类中定义一个成员函数“taste”。那我怎么能这样做? 是否有必要在基类和所有派生类中定义它或者我只能在一个所需的类中定义它,即apple 我是否必须使用虚拟功能

谢谢和问候

2 个答案:

答案 0 :(得分:0)

您不必在基类中定义它。但是,您将无法在基类指针或引用上调用此方法。该功能不需要是虚拟的。

class Fruit {};
class Apple : public Fruit
{
public:
    void Taste();
}

class Orange : public Fruit {}
class Mango : public Fruit {}

Fruit* f = new Apple();
f->Taste(); // Error
Apple* a = new Apple();
a->Taste() // Ok

但是,如果您希望从基类指针或引用访问该方法,则需要在基类中定义虚方法的空实现,并在Apple类中覆盖它。

class Fruit
{
public:
    virtual void Taste() {}
};
class Apple : public Fruit
{
public:
    virtual void Taste()
    {
        // Do something.
    }
}

class Orange : public Fruit {}
class Mango : public Fruit {}

Fruit* f = new Apple();
f->Taste(); // Ok
Fruit* f2 = new Orange();
f2->Taste(); // Ok and no side effect.

答案 1 :(得分:0)

在一般设计模式中,应将类行为和质量作为模式添加到名为taset的不同子类中。

这是鸭子的一个很好的例子,这也适用于你的水果

http://www.cs.colorado.edu/~kena/classes/5448/f09/lectures/16-introdesignpatterns.pdf