C++ 多态 - 公有继承(c++继承与多态)
多态是面向对象编程的重要特性之一,它允许我们通过基类指针或引用调用派生类的成员函数。在C++中,多态通常是通过虚函数和继承来实现的。其中,公有继承是实现多态的一种重要方式。
公有继承是指派生类继承了基类的所有成员,包括成员变量和成员函数。当我们使用公有继承时,基类中的公有成员和受保护成员可以被派生类访问,而私有成员则无法被派生类访问。派生类可以通过继承基类的成员函数来访问基类的成员变量,也可以覆盖基类的成员函数来实现多态。
多态的实现是通过虚函数来完成的。虚函数是一种特殊的成员函数,它在基类中被声明为虚函数,并且在派生类中被重写。当我们通过基类指针或引用调用虚函数时,实际调用的是派生类中的虚函数,从而实现多态。
下面是一个简单的示例,演示了多态公有继承的用法:
#include <iostream>
class Shape {
public:
virtual void draw() { std::cout << "Drawing a shape." << std::endl; }
};
class Rectangle : public Shape {
public:
void draw() { std::cout << "Drawing a rectangle." << std::endl; }
};
class Circle : public Shape {
public:
void draw() { std::cout << "Drawing a circle." << std::endl; }
};
int main() {
Shape* shape1 = new Rectangle();
Shape* shape2 = new Circle();
shape1->draw(); // 输出 "Drawing a rectangle."
shape2->draw(); // 输出 "Drawing a circle."
delete shape1;
delete shape2;
return 0;
}
需要注意的是,只有将基类的成员函数声明为虚函数,才能在派生类中进行重写,并实现多态。否则,无论通过基类指针还是派生类指针调用该函数,都将只能调用到基类中的函数。