C++面向对象编程核心概念全解析

张开发
2026/4/15 9:04:14 15 分钟阅读

分享文章

C++面向对象编程核心概念全解析
好的这是一个关于C面向对象编程核心概念的综合问题。我将分步解释继承、多态、类型转换以及函数重载、隐藏、覆盖的实现并提供相关代码示例。1. 继承 (Inheritance)继承允许一个类派生类继承另一个类基类的属性和方法实现代码重用和层次化设计。class Base { public: int baseVar; void baseFunc() { // 基类函数实现 } }; class Derived : public Base { // public继承 public: int derivedVar; void derivedFunc() { // 派生类函数实现 } };访问权限public继承时基类的public成员在派生类中仍是publicprotected成员仍是protected。构造/析构顺序构造时先基类后派生类析构时顺序相反。2. 多态 (Polymorphism) 与虚函数多态允许通过基类指针或引用调用派生类的重写函数需满足基类函数声明为virtual派生类函数签名相同覆盖或添加override关键字C11class Shape { public: virtual void draw() { // 虚函数 std::cout Drawing Shape std::endl; } }; class Circle : public Shape { public: void draw() override { // 覆盖基类虚函数 std::cout Drawing Circle std::endl; } }; // 使用多态 Shape* shape new Circle(); shape-draw(); // 输出: Drawing Circle delete shape;虚函数表vtable编译器为实现多态生成的动态绑定机制。纯虚函数virtual void draw() 0;使类成为抽象类不能实例化。3. 函数重载、隐藏与覆盖(1) 重载 (Overload)同一作用域中函数名相同但参数列表不同class MyClass { public: void func(int x) {} void func(double x) {} // 重载 };(2) 隐藏 (Hiding)派生类定义与基类同名函数非虚遮蔽基类函数class Base { public: void func() {} }; class Derived : public Base { public: void func() { // 隐藏基类func() Base::func(); // 可通过作用域调用基类版本 } };(3) 覆盖 (Override)派生类重新实现基类的虚函数需签名严格匹配class Base { public: virtual void virtFunc() {} }; class Derived : public Base { public: void virtFunc() override {} // 覆盖 };4. 基类与派生类指针转换(1) 向上转换 (Upcasting)派生类指针转基类指针安全隐式转换Derived* d new Derived(); Base* b d; // 向上转换(2) 向下转换 (Downcasting)基类指针转派生类指针需显式转换可能不安全Base* b new Derived(); // 方式1: static_cast (假设类型确定) Derived* d1 static_castDerived*(b); // 方式2: dynamic_cast (需虚函数运行时检查) Derived* d2 dynamic_castDerived*(b); if (d2) { // 转换成功检测 // 安全操作 }(3) 类型识别 (RTTI)使用typeid获取实际类型需开启RTTI#include typeinfo Base* obj new Derived(); std::cout typeid(*obj).name(); // 输出Derived的类型信息关键总结概念实现要点继承class Derived : public Base多态基类虚函数 派生类override函数隐藏派生类同名非虚函数遮蔽基类函数函数覆盖派生类重新实现基类虚函数向上转换隐式安全转换Base* b new Derived()向下转换显式转换dynamic_cast安全或static_cast无检查通过合理组合这些机制可构建灵活且易于扩展的面向对象系统。

更多文章