✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
目录
- C++三大特性详解:封装、继承与多态
- 封装(Encapsulation)
- 继承(Inheritance)
- 多态(Polymorphism)
- 总结
C++三大特性详解:封装、继承与多态
C++是一种功能强大的编程语言,它以其面向对象编程(OOP)的特性而著称。OOP的三大核心特性——封装、继承和多态,为开发高效、可维护的代码提供了基础。本文将详细讲解这三个特性,并配以相应的代码示例。
封装(Encapsulation)
封装是面向对象编程的一个基本特性,它允许我们将对象的实现细节隐藏在对象的外部,只公开一些必要的接口供使用者进行访问。在C++中,封装主要是通过类(class)来实现的。
封装的意义
封装的意义在于保护对象的内部数据,避免外界的干扰和误用,同时提高代码的可读性、可维护性和安全性。通过封装,可以将数据成员定义为私有(private),只能通过公有(public)成员函数进行访问和修改。
示例代码
#include <iostream>
using namespace std;class Student {
private:string name;int age;float grade;public:// 构造函数Student(string n, int a, float g) {name = n;age = a;grade = g;}// 获取学生姓名string getName() {return name;}// 设置学生姓名void setName(string n) {name = n;}// 获取学生年龄int getAge() {return age;}// 设置学生年龄void setAge(int a) {age = a;}// 获取学生成绩float getGrade() {return grade;}// 设置学生成绩void setGrade(float g) {grade = g;}
};int main() {Student s("张三", 20, 90.5);cout << "学生姓名: " << s.getName() << endl;cout << "学生年龄: " << s.getAge() << endl;cout << "学生成绩: " << s.getGrade() << endl;s.setName("李四");s.setAge(21);s.setGrade(95.0);cout << "更新后的学生姓名: " << s.getName() << endl;cout << "更新后的学生年龄: " << s.getAge() << endl;cout << "更新后的学生成绩: " << s.getGrade() << endl;return 0;
}
对象的初始化和清理
对象的初始化和清理是C++编程中两个非常重要的安全问题。C++通过构造函数和析构函数来解决这些问题。构造函数在对象创建时自动调用,用于初始化对象;析构函数在对象销毁前自动调用,用于执行清理工作。
示例代码
#include <iostream>
using namespace std;class Person {
public:// 构造函数Person() {cout << "Person的构造函数调用" << endl;}// 析构函数~Person() {cout << "Person的析构函数调用" << endl;}
};void test01() {Person p;
}int main() {test01();system("pause");return 0;
}
对象模型和this指针
在C++中,对象模型是将数据和操作数据的函数绑定在一起的一种机制。this指针是一个隐含在每个非静态成员函数中的指针,它指向被调用函数的所属对象。
示例代码
#include <iostream>
using namespace std;class Person {
public:Person(int a) {this->age = a;}Person& addAge(Person& p) {this->age += p.age;return *this;}int getAge() {return age;}private:int age;
};void test01() {Person p1(10);Person p2(20);p1.addAge(p2).addAge(p2).addAge(p2);cout << "p1的年龄: " << p1.getAge() << endl;
}int main() {test01();return 0;
}
友元(Friend)
友元函数是一种特殊的成员函数,它可以访问类的私有和保护成员。通过将函数声明为当前类的友元函数,该函数就可以访问当前类的私有和保护成员。
示例代码
#include <iostream>
using namespace std;class Student {
private:int age;double height;float chinese;float english;float math;public:Student(float c, float e, float m) {chinese = c;english = e;math = m;}friend void output(Student &s);
};void output(Student &s) {cout << "Output: " << s.chinese << "--" << s.english << "--" << s.math << endl;
}int main() {Student s(78.5, 88.2, 95.0);output(s);system("pause");return 0;
}
继承(Inheritance)
继承是面向对象编程中一种基本的思想,它允许我们创建一个新的子类,继承现有父类的属性和方法。子类可以添加新的属性和方法,以实现更强大的功能,还可以重写父类中的方法,以实现不同的行为。
继承的方式
C++中的继承方式有三种:公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。
示例代码
#include <iostream>
using namespace std;// 基类
class Animal {
public:void eat() {cout << "Eating..." << endl;}void sleep() {cout << "Sleeping..." << endl;}
};// 派生类
class Dog : public Animal {
public:void bark() {cout << "Barking..." << endl;}
};int main() {Dog d;d.eat();d.sleep();d.bark();return 0;
}
多态(Polymorphism)
多态是面向对象编程中的一种特性,它允许我们通过父类的指针或引用来调用子类的成员函数,从而实现动态绑定。多态性可以分为编译时多态和运行时多态。C++中的多态性主要通过虚函数(virtual function)来实现。
示例代码
#include <iostream>
using namespace std;// 基类
class Shape {
public:virtual void draw() {cout << "Drawing Shape" << endl;}
};// 派生类
class Circle : public Shape {
public:void draw() override {cout << "Drawing Circle" << endl;}
};// 派生类
class Rectangle : public Shape {
public:void draw() override {cout << "Drawing Rectangle" << endl;}
};int main() {Shape *s1 = new Circle();Shape *s2 = new Rectangle();s1->draw(); // 输出: Drawing Circles2->draw(); // 输出: Drawing Rectangledelete s1;delete s2;return 0;
}
总结
封装、继承和多态是C++面向对象编程的三大核心特性。封装提高了代码的可读性、可维护性和安全性;继承促进了代码的重用和扩展;多态则实现了动态绑定,增强了程序的灵活性。通过合理利用这些特性,我们可以开发出高效、可维护的C++程序。