基础语法——组合与继承
继承
定义派生类,即继承的一般语法结构如下
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说明符,直接重写就可以