我们研究一下继承和虚函数。
比如我们需要求正方形、长方形的周长、面积:
选择1计算长方形
选择2计算正方形
选择3退出
其他无效
我们做一个继承实现,父类矩形,子类有正方形、长方形继承矩形
C++的继承语法如下:
矩形
class Rectangle
正方形
class Square: public Rectangle
长方形
class Oblong: public Rectangle
对正方形、长方形求面积、周长。面积公式相同,在矩形父类完成,函数area();周长公式不同,在各个子类种实现。这里有一个虚函数side()。
/** * 求边长 */ virtual int side()=0; |
让函数side()=0;是在此定义,由子类实现。类似于Java的抽象父类,指定需要子类实现的方法。
矩形类:
/** * 矩形 */ class Rectangle { protected: int a; // a边 int b; // b边 public: /** * 求面积 */ int area() { return a * b; } /** * 求边长 */ virtual int side()=0; }; |
设置了a、b两边且为protected供子类直接使用,给出了求面积的函数实现area(),同时定义了求边长的函数side(),要求函数side()由子类实现。
正方形类:
/** * 正方形 */ class Square: public Rectangle { public: /** * 设置边 */ void setA(int a) { this->a = a; this->b = a; } /** * 求边长 */ virtual int side() { return 4 * a; } }; |
实现了求边长函数side(),同时加入设置边函数setA(int a)。
长方形类:
/** * 长方形 */ class Oblong: public Rectangle { public: /** * 设置a边 */ void setA(int a) { this->a = a; } /** * 设置b边 */ void setB(int b) { this->b = b; } /** * 求边长 */ virtual int side() { return 2 * a * b; } }; |
#p#副标题#e#
实现了求边长函数side(),同时加入设置边函数setA(int a)和setB(int b)。
根据输入做相应计算:
/** Oblong o; // 长方形 cout << endl; cin >> chioce; switch (chioce) { cout << "输入a边:"; o.setA(a); cout << "面积为:" << o.area() << endl; calculate(); cout << "输入a边:"; s.setA(a); cout << "面积为:" << s.area() << endl; calculate(); |
#include <iostream> using namespace std; /** /** /** /** Oblong o; // 长方形 cout << endl; cin >> chioce; switch (chioce) { cout << "输入a边:"; o.setA(a); cout << "面积为:" << o.area() << endl; calculate(); cout << "输入a边:"; s.setA(a); cout << "面积为:" << s.area() << endl; calculate(); /** return 0; |
选择矩形类型: 选择矩形类型: 选择矩形类型: 选择矩形类型: |