在 C++ 中,类(Class) 是面向对象编程(OOP)的核心概念,用于封装数据和行为。以下是关于类的主要概念和用法:
1. 类的基本结构
- 定义类:使用
class
或struct
关键字(class
默认成员为private
,struct
默认成员为public
)。class MyClass { public: // 公有成员(外部可访问) void publicMethod(); private: // 私有成员(仅类内可访问) int privateData; };
2. 成员变量和成员函数
- 成员变量:类内部定义的变量,表示对象的状态。
- 成员函数:类内部定义的函数,表示对象的行为。
class Circle { public: double radius; double getArea() { return 3.14 * radius * radius; } };
3. 访问控制
public
:类外可直接访问。private
:仅类内或友元(friend
)可访问。protected
:类内、派生类或友元可访问。class Example { public: int a; // 公有 private: int b; // 私有 protected: int c; // 保护 };
4. 构造函数与析构函数
- 构造函数:初始化对象,与类同名,无返回值。
- 默认构造函数:无参数或参数有默认值。
- 拷贝构造函数:用同类对象初始化(如
MyClass(const MyClass& other)
)。 - 移动构造函数(C++11):用于资源转移(如
MyClass(MyClass&& other)
)。
- 析构函数:释放资源,以
~
开头,无参数。class Person { public: Person() { /* 默认构造 */ } Person(const Person& other) { /* 拷贝构造 */ } ~Person() { /* 析构 */ } };
5. 静态成员
- 静态成员变量:属于类本身,所有对象共享。
- 静态成员函数:只能访问静态成员,无
this
指针。class Counter { public: static int count; // 静态变量声明 static void increment() { count++; } }; int Counter::count = 0; // 静态变量定义
6. 继承
- 基类(父类) 和 派生类(子类),支持代码复用。
- 继承方式:
public
、protected
、private
。class Animal { /* 基类 */ }; class Dog : public Animal { /* 派生类 */ };
7. 多态与虚函数
- 虚函数(Virtual Function):允许派生类覆盖基类实现。
class Shape { public: virtual void draw() { /* 基类实现 */ } }; class Circle : public Shape { public: void draw() override { /* 派生类实现 */ } };
- 纯虚函数:定义抽象类(不能实例化)。
class AbstractClass { public: virtual void pureVirtual() = 0; // 纯虚函数 };
8. 友元(Friend)
- 友元函数/类:允许非成员函数或类访问私有成员。
class MyClass { private: int secret; friend void friendFunction(MyClass& obj); // 友元函数 }; void friendFunction(MyClass& obj) { obj.secret = 42; // 可直接访问私有成员 }
9. 运算符重载
- 重载运算符(如
+
,==
)以支持自定义类型操作。class Vector { public: Vector operator+(const Vector& other) { // 实现向量加法 } };
10. this
指针
- 指向当前对象的指针,用于成员函数内部访问自身成员。
class MyClass { public: void setValue(int value) { this->value = value; // 明确指向当前对象的成员 } private: int value; };
11. 嵌套类
- 在类内部定义的类,通常用于实现细节。
class Outer { public: class Inner { /* 嵌套类 */ }; };
12. 移动语义(C++11)
- 移动构造函数 和 移动赋值运算符:高效转移资源(如动态内存)。
class MyString { public: MyString(MyString&& other) { /* 移动资源 */ } };
总结
类在 C++ 中通过 封装、继承 和 多态 实现面向对象设计。合理使用构造函数、访问控制、虚函数等特性,可以构建高效、可维护的代码结构。
练一练:
答案 D