C++ 继承详解及实例代码
什么是继承
继承是一种面向对象编程中常用的技术,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承使得代码重用和维护变得更加容易,同时还可以提供多态行为和高层次的抽象。
继承的类型
C++ 支持以下几种继承类型:
- 公有继承(public inheritance)
- 私有继承(private inheritance)
- 保护继承(protected inheritance)
公有继承
公有继承表示子类可以访问父类的公有成员和保护成员,但不可以访问父类的私有成员。一个子类可以有多个公有基类。
class Parent {
public:
int m_public;
protected:
int m_protected;
private:
int m_private;
};
class Child : public Parent {
public:
void access_parent_members() {
m_public = 1; // OK
m_protected = 2; // OK
// m_private = 3; // Error! Cannot access private member.
}
};
私有继承
私有继承表示子类可以访问父类的公有成员和保护成员,但这些成员在子类中都变成私有成员。一个子类只能有一个私有基类。
class Parent {
public:
int m_public;
protected:
int m_protected;
private:
int m_private;
};
class Child : private Parent {
public:
void access_parent_members() {
m_public = 1; // OK
m_protected = 2; // OK
// m_private = 3; // Error! Cannot access private member.
}
};
保护继承
保护继承和私有继承类似,但子类中所有父类成员都变成了保护成员。一个子类只能有一个保护基类。
class Parent {
public:
int m_public;
protected:
int m_protected;
private:
int m_private;
};
class Child : protected Parent {
public:
void access_parent_members() {
m_public = 1; // OK
m_protected = 2; // OK
// m_private = 3; // Error! Cannot access private member.
}
};
实例代码
示例 1:形状的继承
考虑一个简单的系统,其中有三个形状类:圆形、正方形和矩形,它们都有一个计算面积的方法。我们可以定义一个基类 Shape,并让这三个形状类从 Shape 类中继承计算面积的方法。
class Shape {
public:
virtual double get_area() const = 0;
};
class Circle : public Shape {
double m_radius;
public:
Circle(double radius) : m_radius(radius) {}
virtual double get_area() const override {
return 3.14 * m_radius * m_radius;
}
};
class Rectangle : public Shape {
double m_width;
double m_height;
public:
Rectangle(double width, double height) : m_width(width), m_height(height) {}
virtual double get_area() const override {
return m_width * m_height;
}
};
class Square : public Rectangle {
public:
Square(double side) : Rectangle(side, side) {}
};
在上面的代码中,Shape 类是一个抽象基类,其中定义了纯虚函数 get_area(),任何从 Shape 类继承的子类都必须实现这个函数。Circle 类和 Rectangle 类都从 Shape 类中继承了 get_area() 函数,并分别实现了自己的计算面积的方法。Square 类从 Rectangle 类中继承了 get_area() 函数,并重新定义了自己的形状。
示例 2:多重继承
多重继承是指一个子类从多个父类中继承属性和方法的情况。C++ 支持多重继承,可以通过在子类中使用逗号分隔的方式继承多个父类。
class A {
public:
int m_a;
};
class B {
public:
int m_b;
};
class C : public A, public B {
public:
int get_sum() {
return m_a + m_b;
}
};
在上面的代码中,类 C 从类 A 和类 B 中继承了它们的成员变量 m_a 和 m_b。由于 m_a 和 m_b 都是公有成员,因此可以在子类 C 中访问它们。C 类还定义了一个成员函数 get_sum(),用于计算 m_a 和 m_b 的和。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 继承详解及实例代码 - Python技术站