面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”来设计软件。在C++中,面向对象编程是一个核心特性,允许开发者创建复杂的程序结构,使代码更易于维护、扩展和重用。
类与对象
类是面向对象编程中的一个基本概念。类定义了一种数据类型,它不仅包含了数据成员(属性),还包含了方法(行为)。对象则是类的实例,是根据类定义创建的具体实体。
定义类
在C++中,可以通过class
关键字来定义一个类。类的定义通常包括数据成员和成员函数。下面是一个简单的例子:
class Rectangle { int width, height; public: void set_values(int, int); int area() { return width * height; } };
在这个例子中,Rectangle
类有两个私有数据成员width
和height
,以及两个公有成员函数set_values()
和area()
。
创建对象
一旦定义了一个类,就可以通过这个类来创建对象。创建对象的过程也称为实例化。
Rectangle rect; rect.set_values(3, 4); // 调用成员函数 int area = rect.area(); // 获取矩形面积
访问控制
C++提供了三种访问控制级别:public
、protected
和private
。这些访问控制级别决定了类成员可以被哪些部分访问。
public
:类的外部也可以访问。protected
:只能被类本身及其派生类访问。private
:只能被类内部访问。
构造函数与析构函数
构造函数和析构函数是特殊的成员函数,它们分别在对象创建时和销毁时自动调用。
构造函数
构造函数用于初始化对象的状态。构造函数的名字必须与类名相同,并且没有返回类型。
class Rectangle { int width, height; public: Rectangle(int w, int h) : width(w), height(h) {} // 初始化列表 int area() { return width * height; } };
析构函数
析构函数在对象生命周期结束时被调用,用于清理资源。析构函数的名字也是类名,但前面加一个波浪线~
。
class Rectangle { int width, height; public: Rectangle(int w, int h) : width(w), height(h) {} ~Rectangle() {} // 析构函数 int area() { return width * height; } };
继承
继承是面向对象编程的一个重要特性,它允许创建一个新类(派生类),该类继承了另一个类(基类)的属性和方法。
定义基类和派生类
-- -------------------- ---- ------- ----- ----- - ------- ------- ---- ------ - -- -- ---- -- ----- ------ - ------ ----- - ------- ---- ------ -------- - --------- -- -------- - ----------- - --
多态性
多态性允许使用基类的指针或引用来操作派生类的对象。这使得编写更加灵活和可扩展的代码成为可能。
Shape* shape = new Circle(); shape->draw(); // 输出 "Drawing a circle."
封装
封装是将数据(属性)和行为(方法)绑定在一起,隐藏对象的内部实现细节,只暴露必要的接口给外部使用。C++通过访问控制符public
、protected
和private
来实现封装。
class BankAccount { private: double balance; public: void deposit(double amount) { balance += amount; } double get_balance() const { return balance; } };
在这个例子中,balance
变量被声明为private
,这意味着它只能在BankAccount
类内部访问。用户无法直接修改余额,只能通过deposit
和get_balance
方法间接操作。
多态与虚函数
多态是指不同类的对象对同一消息作出响应的能力,通常通过虚函数实现。
虚函数
虚函数是在基类中声明并在派生类中重写的函数,允许通过基类的指针或引用调用派生类的方法。
-- -------------------- ---- ------- ----- ------ - ------- ------- ---- ------------ ----- - --------- -- ----- --------- - -- ----- --- - ------ ------ - ------- ---- ------------ ----- -------- - --------- -- ---------- - --
在这个例子中,make_sound
被声明为虚函数。当通过基类指针调用这个函数时,实际执行的是派生类版本。
纯虚函数与抽象类
纯虚函数是没有具体实现的虚函数,声明形式为virtual 返回类型 函数名() = 0;
。含有纯虚函数的类被称为抽象类,不能用来创建对象,只能作为其他类的基类。
class Shape { public: virtual double area() const = 0; // 纯虚函数 };
以上就是C++面向对象编程的基本内容。理解这些概念对于掌握C++语言至关重要,因为它们构成了构建复杂程序的基础。