继承
定义派生类,即继承的一般语法结构如下
- class 派生类名 : [继承方式] 基类名
- {
- };
例如
- class Point{
- int x, y;
- public:
- Point(int a=0, int b=0): x(a), y(b){}
- virtual double area() {return 0.0; };
- virtual double volume() { return 0.0; }
- };
- class Circle: public Point{
- ...
- };
- class Cylinder: public Circle{
- ...
- };
虚函数体现了多态性
通过关键字virtual将基类的函数声明为虚函数,允许派生类重写(覆盖)该函数
例
- class Point{
- int x, y;
- public:
- Point(int a=0, int b=0): x(a), y(b){}
- virtual double area() {return 0.0; };
- virtual double volume() { return 0.0; }
- };
override说明符
override说明符显式声明了派生类中的一个成员函数重写、覆盖(override)了一个基类中的虚函数
例
- class Point{
- int x, y;
- public:
- Point(int a=0, int b=0): x(a), y(b){}
- virtual double area() {return 0.0; };
- virtual double volume() { return 0.0; }
- };
- class Circle : public Point
- {
- public:
- double radius;
- Circle(double _radius, int a = 0, int b = 0) : radius(_radius), Point(a, b){};
- virtual double area () override
- {
- return pi * radius * radius;
- }
- virtual double volume() override
- {
- return 0.0;
- }
- };
-
- class Cylinder : public Circle
- {
- public:
- double height;
- Cylinder(double _height, double _radius, int a = 0, int b = 0) : height(_height), Circle(_radius, a, b){};
- virtual double area () override
- {
- return 2 * Circle :: area() + 2 * pi * radius * height;
- }
- virtual double volume() override
- {
- return Circle :: area() * height;
- }
- };
P.S.:如果基类中成员函数没加virtual说明符,那么你在派生类中重写该成员函数时候就不用加override说明符,直接重写就可以