C++面向对象编程(视频教程)
概述
- C++ 面向对象编程(OOP)是一种以对象为中心的编程范式,它将数据和操作数据的方法封装在一起,通过类和对象来组织代码。
- 视频教程:
https://pan.quark.cn/s/41d99910ce32
1. 类(Class)与对象(Object)
- 类:是一种用户自定义的数据类型,包含数据成员(属性)和成员函数(方法),用于描述一类事物的共同特征和行为。
- 对象:是类的实例,通过类创建,拥有类定义的属性和方法。
// 类的定义
class Person {
private:// 私有数据成员(只能在类内部访问)string name;int age;public:// 公有成员函数(类外部可访问)void setInfo(string n, int a) {name = n;age = a;}void display() {cout << "Name: " << name << ", Age: " << age << endl;}
};// 创建对象并使用
int main() {Person p1; // 创建Person类的对象p1p1.setInfo("Alice", 25);p1.display();return 0;
}
2. 封装(Encapsulation)
- 将数据和操作数据的方法捆绑在一起,隐藏对象的内部实现细节,只通过公共接口与对象交互。
- 通过访问控制符实现:
private
(私有,仅类内访问)、public
(公有,任何地方可访问)、protected
(保护,类内和派生类可访问)。
3. 继承(Inheritance)
- 允许一个类(派生类)继承另一个类(基类)的属性和方法,实现代码复用和层次化设计。
- 派生类可以添加新成员或重写基类方法。
// 基类
class Animal {
public:void eat() {cout << "Animal is eating" << endl;}
};// 派生类,继承自Animal
class Dog : public Animal {
public:void bark() {cout << "Dog is barking" << endl;}
};int main() {Dog dog;dog.eat(); // 继承基类的方法dog.bark(); // 派生类自己的方法return 0;
}
4. 多态(Polymorphism)
- 同一操作作用于不同对象,产生不同的行为。
- 分为编译时多态(函数重载、运算符重载)和运行时多态(虚函数与动态绑定)。
class Shape {
public:// 虚函数,允许派生类重写virtual void draw() {cout << "Drawing a shape" << endl;}
};class Circle : public Shape {
public:// 重写基类的虚函数void draw() override {cout << "Drawing a circle" << endl;}
};class Square : public Shape {
public:void draw() override {cout << "Drawing a square" << endl;}
};int main() {Shape* shape1 = new Circle();Shape* shape2 = new Square();shape1->draw(); // 调用Circle的draw()shape2->draw(); // 调用Square的draw()delete shape1;delete shape2;return 0;
}
5. 其他重要概念
- 构造函数:用于对象初始化的特殊成员函数,与类同名,无返回值。
- 析构函数:对象销毁时自动调用的特殊成员函数,用于释放资源,格式为
~类名()
。 - 友元函数/类:允许外部函数或类访问类的私有成员,但会破坏封装性,谨慎使用。
- 抽象类:包含纯虚函数(
virtual void func() = 0;
)的类,不能实例化,只能作为基类。
面向对象编程的优势
- 代码复用性高(通过继承)
- 模块化和可维护性好(通过封装)
- 扩展性强(通过多态和继承)
- 更符合人类对现实世界的认知方式
C++ 的面向对象特性使其非常适合开发大型、复杂的软件系统,如游戏引擎、操作系统等。