C++学习日记 day005

1、多态(polymorphism)

#include <iostream>

using namespace std;

class Shape {
protected:
    int width, height;
public:
    Shape(int a = 0, int b = 0) {
        width = a;
        height = b;
    }

    virtual int area() {   //加上virtual表示虚函数,告诉编译器不要链接到该函数
        cout << "Parent class Area:" << endl;
        return 0;
    }
    // 也可在基类中定义纯虚函数,如下所示,虚函数声明时必须=0
//    virtual int area()=0;
};

class Rectangle : public Shape {  // 矩形
public :
    Rectangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Rectangle class area:" << endl;
        return (width * height);
    }
};

class Triangle : public Shape {  //三角形
public:
    Triangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Triangle class area :" << endl;
        return (width * height / 2);
    }
};

int main() {
    Shape *shape;
    Rectangle rec(10, 7);
    Triangle tri(10, 5);
     由于shape基类中也有area函数,所以会输出Parent class Area:,这样得到的是基类中得area
     这就是静态多态或者是静态链接,函数在程序执行之前就准备好了,也被称之为早绑定
     此时只需要在前面加上virtual即可避免这种现象
    // 指向矩形
    shape = &rec;
    shape->area();
    // 指向三角形
    shape = &tri;
    shape->area();
    return 0;
}

2、数据抽象(Data Abstraction)

#include <iostream>

using namespace std;

class Shape {
protected:
    int width, height;
public:
    Shape(int a = 0, int b = 0) {
        width = a;
        height = b;
    }

    virtual int area() {   //加上virtual表示虚函数,告诉编译器不要链接到该函数
        cout << "Parent class Area:" << endl;
        return 0;
    }
    // 也可在基类中定义纯虚函数,如下所示,虚函数声明时必须=0
//    virtual int area()=0;
};

class Rectangle : public Shape {  // 矩形
public :
    Rectangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Rectangle class area:" << endl;
        return (width * height);
    }
};

class Triangle : public Shape {  //三角形
public:
    Triangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Triangle class area :" << endl;
        return (width * height / 2);
    }
};

int main() {
    Shape *shape;
    Rectangle rec(10, 7);
    Triangle tri(10, 5);
     由于shape基类中也有area函数,所以会输出Parent class Area:,这样得到的是基类中得area
     这就是静态多态或者是静态链接,函数在程序执行之前就准备好了,也被称之为早绑定
     此时只需要在前面加上virtual即可避免这种现象
    // 指向矩形
    shape = &rec;
    shape->area();
    // 指向三角形
    shape = &tri;
    shape->area();
    return 0;
}

3、数据封装(Data Encapsulation)

#include <iostream>

using namespace std;

class Shape {
protected:
    int width, height;
public:
    Shape(int a = 0, int b = 0) {
        width = a;
        height = b;
    }

    virtual int area() {   //加上virtual表示虚函数,告诉编译器不要链接到该函数
        cout << "Parent class Area:" << endl;
        return 0;
    }
    // 也可在基类中定义纯虚函数,如下所示,虚函数声明时必须=0
//    virtual int area()=0;
};

class Rectangle : public Shape {  // 矩形
public :
    Rectangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Rectangle class area:" << endl;
        return (width * height);
    }
};

class Triangle : public Shape {  //三角形
public:
    Triangle(int a = 0, int b = 0) : Shape(a, b) {}

    int area() {
        cout << "Triangle class area :" << endl;
        return (width * height / 2);
    }
};

int main() {
    Shape *shape;
    Rectangle rec(10, 7);
    Triangle tri(10, 5);
     由于shape基类中也有area函数,所以会输出Parent class Area:,这样得到的是基类中得area
     这就是静态多态或者是静态链接,函数在程序执行之前就准备好了,也被称之为早绑定
     此时只需要在前面加上virtual即可避免这种现象
    // 指向矩形
    shape = &rec;
    shape->area();
    // 指向三角形
    shape = &tri;
    shape->area();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hithithithithit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值