C++的多态特性及private
多态:多态是面向对象编程的核心概念之一,它允许不同类的对象对同一消息(方法调用)做出不同的响应。C++ 主要通过虚函数(virtual functions)实现运行时多态
使用场景:例如我想实现一个shape模块,shape目前有圆柱、圆锥、球、正方体,需要实现功能
1、shape的体积、表面积、弹性系数(public):提供外部接口,让我们访问
2、shape的材质、ID号(protect):不同的shape有不同的材质,需要派生的时候单独设置
3、shape的name(private):仅限shape内部访问,每个shape都有的
现在需求已经摆出来了,如何去合理设计?
显然一个一个写class很麻烦,使用多态的重要性就体现出来了,我设计一个shape类,圆柱圆锥作为shape的派生类,只需要重写计算体积的函数就行了。
运行时多态 | 虚函数 + 继承 | 运行时 | 动态绑定,灵活性高 |
编译时多态 | 函数重载、模板、运算符重载 | 编译时 | 静态绑定,性能更好 |
运行时多态:
主要是通过在基类使用virtual声明函数,在继承时使用override重写虚函数
class Base {
public:// 虚函数声明virtual void print() const {std::cout << "Base class print\n";}// 虚析构函数(重要!)virtual ~Base() = default;
};class Derived : public Base {
public:// 重写基类虚函数void print() const override { // override 关键字(C++11)std::cout << "Derived class print\n";}
};
protected
成员允许派生类访问基类的内部实现细节,这是实现多态行为的基础,派生类可以直接访问基类的 protected
成员