详解C++中单继承与多继承的使用
C++中继承是面向对象编程中非常重要的一个特性,它允许我们创建一个类继承另一个类的属性和方法。C++中继承可以分为单继承与多继承两种。
单继承
单继承是指一个类只能继承一个基类,示例如下:
class Animal{
public:
void Eat(){cout<<"Animal Eat."<<endl;}
};
class Cat : public Animal{
public:
void Meow(){cout<<"Cat Meow."<<endl;}
};
在上面的示例中,Cat类继承Animal类,因此可以直接使用父类的成员函数Eat,Cat类还新增了自己的成员函数Meow。
多继承
多继承是指一个类可以同时继承多个基类,示例如下:
class Bird{
public:
void Fly(){cout<<"Bird Fly."<<endl;}
};
class Penguin{
public:
void Swim(){cout<<"Penguin Swim."<<endl;}
};
class PinguinBird : public Bird, public Penguin{
public:
void Info(){cout<<"I'm PinguinBird."<<endl;}
};
在上面的示例中,PinguinBird类同时继承Bird和Penguin两个类,因此可以同时使用两个父类的成员函数Fly和Swim,PinguinBird类自己新增了成员函数Info。
注意事项
在使用继承的过程中,需要注意以下几点:
- 子类会继承父类的所有成员变量和成员函数,但是无法继承父类的构造函数和析构函数。
- 继承会导致父子类之间产生依赖关系,要注意继承的层次不要过深,避免导致复杂的继承关系。
- 如果子类定义了与父类同名的成员变量或成员函数,则子类会覆盖父类的同名成员,称为覆盖(override)。
示例说明
下面以一个图形类为例,展示单继承和多继承的使用场景。
图形类是一个抽象类,包括计算面积和计算周长的方法,但是没有具体实现。
class Shape{
public:
virtual double Area() = 0;
virtual double Perimeter() = 0;
};
矩形类和圆形类都是图形类的子类,分别计算自己的面积和周长。
class Rectangle : public Shape{
public:
Rectangle(double w, double h) : width(w), height(h){}
virtual double Area(){return width * height;}
virtual double Perimeter(){return 2 * (width + height);}
private:
double width;
double height;
};
class Circle : public Shape{
public:
Circle(double r) : radius(r){}
virtual double Area(){return 3.14 * radius * radius;}
virtual double Perimeter(){return 2 * 3.14 * radius;}
private:
double radius;
};
此处的继承形式为单继承,子类只继承了一个基类。如果顺带想要实现一个正方形类,由于正方形既是矩形又是圆形,可以考虑使用多继承。
class Square : public Rectangle, public Circle{
public:
Square(double len) : Rectangle(len, len), Circle(len/2.0){}
virtual double Area(){return Rectangle::Area();}
virtual double Perimeter(){return Rectangle::Perimeter();}
};
上面的代码中,由于正方形既是矩形又是圆形,因此使用多继承同时继承了Rectangle和Circle两个基类。此处需要注意的是,为了防止二义性问题,需要手动指定使用哪个父类的同名成员函数(即Area和Perimeter),如上面代码中的Rectangle::Area和Rectangle::Perimeter。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C++中单继承与多继承的使用 - Python技术站