继承、多态与虚函数
继承、多态与虚函数代码复用与运行时绑定继承让派生类获得基类的成员多态让同一接口在不同对象上表现出不同行为。C 通过virtual虚函数实现运行时多态。一、继承基础1.1 语法#includeiostream#includestringclassPerson{protected:std::string name;intage;public:Person(conststd::stringn,inta):name(n),age(a){}voidshowInfo()const{std::coutname, age 岁std::endl;}};classStudent:publicPerson{private:std::string studentId;public:Student(conststd::stringn,inta,conststd::stringid):Person(n,a),studentId(id){}voidshowInfo()const{Person::showInfo();std::cout学号studentIdstd::endl;}};intmain(){Students(李四,20,2024001);s.showInfo();return0;}1.2 继承方式方式含义public继承最常用is-a 关系protected继承较少用private继承实现继承较少用二、访问控制与继承基类成员public 继承protected 继承private 继承publicpublicprotectedprivateprotectedprotectedprotectedprivateprivate不可访问不可访问不可访问派生类可访问基类的public和protected成员。三、虚函数与多态3.1 问题非虚函数classAnimal{public:voidspeak(){std::cout...std::endl;}};classDog:publicAnimal{public:voidspeak(){std::cout汪汪std::endl;}};Animal*pnewDog();p-speak();// 输出 ... — 非多态deletep;3.2 虚函数解决classAnimal{public:virtualvoidspeak(){std::cout...std::endl;}virtual~Animal(){}// 虚析构多态删除时必须};classDog:publicAnimal{public:voidspeak()override{std::cout汪汪std::endl;}};Animal*pnewDog();p-speak();// 输出 汪汪 — 多态deletep;virtual通过基类指针/引用调用时根据实际对象类型决定调用哪个版本。3.3 override 与 finalC11voidspeak()override;// 显式标记重写voidspeak()final;// 禁止进一步重写四、纯虚函数与抽象类含纯虚函数的类为抽象类不能实例化classShape{public:virtualdoublearea()const0;// 纯虚函数virtual~Shape()default;};classCircle:publicShape{doubleradius;public:Circle(doubler):radius(r){}doublearea()constoverride{return3.14159*radius*radius;}};五、多态的应用voidprintArea(constShapes){std::cout面积s.area()std::endl;}Circlec(5);Rectangler(3,4);printArea(c);// 圆面积printArea(r);// 矩形面积同一函数printArea处理不同形状体现多态。六、实战练习练习1继承层次定义Vehicle基类Car和Bicycle派生类各自实现move()。练习2虚函数多态定义Employee基类虚函数salary()Manager和Developer派生类重写。练习3抽象类定义抽象类Animal派生Cat、Dog用基类指针数组调用speak()。七、总结与延伸本节重点回顾继承class Derived : public Basevirtual实现运行时多态基类指针调用派生类方法override标记重写纯虚函数 0定义抽象类多态基类需虚析构函数下节预告下一篇《模板与 STL 基础》。延伸阅读C 速查 §9 继承与多态知识点卡片继承class D : public B;virtual void f(); override;纯虚virtual void f() 0;多态基类virtual ~Base() {}下一篇见