C++面向对象——第五次作业

作业题目:请大家结合教材和MOOC资源完成重载与多态的学习,以及相关的验证实验设计!

定义

重载:是指允许存在多个同名方法,而这些方法的参数不同。重载的实现是:编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。
多态:是指子类重新定义父类的虚方法(virtual,abstract)。当子类重新定义了父类的虚方法后,父类根据赋给它的不同的子类,动态调用属于子类的该方法,这样的方法调用在编译期间是无法确定的。
(参考于https://blog.csdn.net/weigb/article/details/1864192)

举例运算符重载(对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为)
#include 
using namespace std;

class Box
{
private:
    double length;
    double width;
    double height;
public:
    double getV()
    {
        return length * width * height;
    }
    void setLength(double len)
    {
        length = len;
    }

    void setBreadth(double bre)
    {
        width = bre;
    }

    void setHeight(double hei)
    {
        height = hei;
    }
    Box operator+(const Box& b)    // 重载 + 运算符,把两个 Box的长、宽、高分别相加
    {
        Box box;
        box.length = this->length + b.length;
        box.width = this->width + b.width;
        box.height = this->height + b.height;
        return box;
    }
};

int main()
{
    Box Box1;
    Box Box2;
    Box Box3;
    double volume = 0.0;

    Box1.setLength(9);
    Box1.setBreadth(6.0);
    Box1.setHeight(3.0);

    Box2.setLength(6.0);
    Box2.setBreadth(4);
    Box2.setHeight(7.0);

    volume = Box1.getV();
    cout << "Volume of Box1 : " << volume << endl;

    volume = Box2.getV();
    cout << "Volume of Box2 : " << volume << endl;

    Box3 = Box1 + Box2;    //重载+的运用

    volume = Box3.getV();
    cout << "Volume of Box3 : " << volume << endl;

    return 0;
}
测试结果


这儿将“+”运算符重载为两个长方体的长、宽、高分别相加,而需要运算的两项也被定义为长方体。

举例多态
#include 

using namespace std;

class Mammal
{
public:
    Mammal()
    {
        cout << "Mammal" << endl;
    }
    virtual void speak()
    {
        cout << "Mammal speak" << endl;
    }
};


class Dog :public Mammal
{
public:
    Dog()
    {
        cout << "Dog" << endl;
    }
    void speak()
    {
        cout << "Dog speak" << endl;
    }
};


void main()
{
    Mammal *p;
    p = new Dog;
    p->speak();
    (*p).speak();
}

被调用的函数必须是虚函数,也就是说必须要在两个产生多态的函数前面加virtual关键字。
调用函数的形参对象必须是基类对象,这里是因为派生类只能给基类赋值,会发生切片操作。基类不能给派生类赋值。

感觉

现在还没多懂这个重载和多态,因此写不出什么东西来,还需要学习。

你可能感兴趣的:(C++面向对象——第五次作业)