尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

C++中的面向对象编程(OOP)三大特性:封装、继承、多态

C++中的面向对象编程(OOP)三大特性:封装、继承、多态 C中的面向对象编程OOP三大特性封装、继承、多态C 是支持面向对象编程的语言其核心特性包括封装Encapsulation、继承Inheritance和多态Polymorphism。下面逐一详细介绍并给出完整的可运行代码示例。1. 封装Encapsulation定义将数据属性和操作数据的方法函数打包在一起对外部隐藏内部实现细节只暴露必要的接口。好处数据保护防止外部直接修改内部状态代码模块化提高安全性与可维护性实现方式使用class推荐或struct访问修饰符public、protected、private通过getter/setter控制访问代码示例#includeiostream#includestringclassStudent{private:// 私有成员外部无法直接访问std::string name;intage;doublescore;public:// 构造函数Student(conststd::stringn,inta,doubles):name(n),age(a),score(s){}// Getterstd::stringgetName()const{returnname;}intgetAge()const{returnage;}doublegetScore()const{returnscore;}// Setter带验证voidsetAge(inta){if(a0a150){agea;}else{std::cout年龄无效\n;}}voidsetScore(doubles){if(s0s100){scores;}else{std::cout分数无效\n;}}// 成员函数voiddisplay()const{std::cout姓名: name, 年龄: age, 分数: scorestd::endl;}};intmain(){Studentstu(张三,20,85.5);stu.display();stu.setAge(21);stu.setScore(92.0);std::cout更新后: stu.getName() 的分数是 stu.getScore()std::endl;return0;}2. 继承Inheritance定义子类派生类自动获得父类基类的成员属性和方法实现代码复用。语法class派生类:访问修饰符 基类{...};访问修饰符public基类 public/protected 成员在派生类中保持原访问级别最常用protected基类 public 成员变为 protectedprivate基类所有成员在派生类中变为 private继承方式单继承、多继承、虚继承解决菱形继承问题。代码示例单继承 protected#includeiostream// 基类classPerson{protected:std::string name;intage;public:Person(conststd::stringn,inta):name(n),age(a){}voidintroduce()const{std::cout我是 name, age岁。std::endl;}};// 派生类classTeacher:publicPerson{private:std::string subject;public:Teacher(conststd::stringn,inta,conststd::stringsub):Person(n,a),subject(sub){}voidteach()const{std::coutname 正在教授 subjectstd::endl;}};intmain(){Teachert(李老师,45,高等数学);t.introduce();// 继承自基类t.teach();return0;}3. 多态Polymorphism定义同一接口不同实现。体现“一个名字多种形态”。C 中多态分为两类编译时多态静态多态函数重载、运算符重载、模板运行时多态动态多态虚函数 继承 基类指针/引用运行时多态核心虚函数virtual#includeiostream// 基类classShape{public:virtualvoiddraw()const{// 虚函数std::cout绘制形状std::endl;}virtualdoublearea()const0;// 纯虚函数 → 抽象类virtual~Shape()default;// 虚析构函数重要};// 派生类1classCircle:publicShape{private:doubleradius;public:Circle(doubler):radius(r){}voiddraw()constoverride{std::cout绘制圆形std::endl;}doublearea()constoverride{return3.14159*radius*radius;}};// 派生类2classRectangle:publicShape{private:doublewidth,height;public:Rectangle(doublew,doubleh):width(w),height(h){}voiddraw()constoverride{std::cout绘制矩形std::endl;}doublearea()constoverride{returnwidth*height;}};intmain(){// 基类指针指向派生类对象 → 多态Shape*shapes[2];shapes[0]newCircle(5.0);shapes[1]newRectangle(4.0,6.0);for(inti0;i2;i){shapes[i]-draw();// 动态绑定调用实际类型的方法std::cout面积: shapes[i]-area()std::endlstd::endl;}// 清理deleteshapes[0];deleteshapes[1];return0;}关键点virtual关键字声明虚函数overrideC11显式标记重写必须通过指针或引用调用才能实现运行时多态基类应有虚析构函数避免内存泄漏总结对比特性主要作用关键关键字/机制使用场景封装隐藏实现细节private、public、getter/setter数据保护、接口设计继承代码复用:冒号、public继承“is-a” 关系多态统一接口灵活扩展virtual、override框架设计、插件系统面向对象设计原则SOLID中这些特性是基础。实际开发中通常结合抽象类含纯虚函数和接口纯虚函数类来实现更灵活的设计。如果你需要多继承、虚继承、运算符重载、模板多态或其他高级示例如智能指针配合多态随时告诉我我可以继续补充
返回列表