文章目录
- 一、类
- 1. 基本类的定义
- 2. 类的访问控制
- 3. 类的实例化
- 4. 构造函数和析构函数
- 5. 继承
- 6. 类的使用
- 二、对象
- 1. 创建对象
- 2. 对象的生命周期
- 3. 对象的内存
- 4. 对象的操作
- 5. 对象的复制
- 6. 总结
- 三、应用案例
- 1. 定义BankAccount类
- 2. 分析
- 四、相关链接
一、类
C++ 类(Class)是C++面向对象编程(OOP)的基石。它允许你定义包含数据和函数的模板,这些数据和函数用于描述某种特定类型的对象。通过类,你可以创建具有属性和行为的对象。在C++中,类是一种用户定义的类型,它允许你封装数据(属性)和操作这些数据的方法(成员函数)。
1. 基本类的定义
一个C++类通过关键字class
来定义,后面跟着类名和一对花括号{}
,其中包含了类的成员(即数据和函数)。
class ClassName {
public:
// 成员变量(属性)
int variable1;
float variable2;
// 成员函数(行为)
void function1() {
// 成员函数体
}
// 可以有构造函数和析构函数
ClassName() {
// 初始化
}
~ClassName() {
// 清理资源
}
private:
// 私有成员变量和函数
int privateVariable;
protected:
// 受保护成员变量和函数
int protectedVariable;
};
2. 类的访问控制
C++中的类成员(包括变量和函数)可以有三种访问级别:
public
:公开成员可以在类的外部被访问。private
:私有成员只能在类的内部被访问,外部代码不能直接访问。protected
:受保护成员在类的内部和派生类(子类)中可以被访问,但不能在类的外部被访问。
3. 类的实例化
创建类的对象的过程称为类的实例化。使用类类型创建对象时,会分配内存以存储对象的成员变量,并可以调用其成员函数。
ClassName obj; // 创建ClassName类的一个对象obj
obj.variable1 = 10; // 访问和修改public成员变量
obj.function1(); // 调用成员函数
4. 构造函数和析构函数
- 构造函数是一种特殊的成员函数,它在创建对象时自动调用,用于初始化对象。
- 析构函数也是一种特殊的成员函数,它在对象销毁时自动调用,用于执行清理工作。
class MyClass {
public:
MyClass() {
// 构造函数体
}
~MyClass() {
// 析构函数体
}
};
5. 继承
C++支持继承,这是面向对象编程的一个关键概念。通过继承,可以创建一个新的类(称为派生类或子类),这个新类可以继承一个或多个现有类(称为基类或父类)的属性和行为。
class BaseClass {
public:
void show() {
// 基类方法
}
};
class DerivedClass : public BaseClass {
public:
void display() {
// 派生类方法
show(); // 调用基类方法
}
};
6. 类的使用
类提供了一种将数据和操作这些数据的方法封装在一起的方式,使得代码更加模块化和可重用。通过定义类,你可以创建具有特定属性和行为的对象,这些对象可以代表现实世界中的实体或概念。
二、对象
在C++中,对象(Object)是类(Class)的实例。当你使用类来创建变量时,你实际上是在创建该类的一个对象。对象包含了类定义中声明的所有成员变量(也称为属性或字段)的副本,并且可以使用类定义中声明的所有成员函数(也称为方法或行为)。
1. 创建对象
创建对象通常涉及使用类名后跟一对圆括号(对于没有参数的构造函数)或包含必要参数的圆括号(对于有参数的构造函数)来声明变量。
class MyClass {
public:
int x;
void display() {
std::cout << "x = " << x << std::endl;
}
// 构造函数
MyClass(int val) : x(val) {}
};
int main() {
// 创建一个MyClass对象,使用构造函数初始化x为10
MyClass obj(10);
// 调用成员函数
obj.display(); // 输出: x = 10
return 0;
}
2. 对象的生命周期
对象的生命周期从它被创建(即分配内存并调用构造函数)开始,到它被销毁(即调用析构函数并释放内存)结束。在上面的例子中,obj
的生命周期从它在main
函数中被创建开始,到main
函数执行完毕、程序退出时结束。
3. 对象的内存
每个对象都占用一定的内存空间,用于存储其成员变量的值。这些值在对象被创建时初始化(通过构造函数),并在对象被销毁时(通过析构函数)进行清理(如果有必要的话)。
4. 对象的操作
你可以通过点操作符(.
)来访问对象的成员变量和成员函数。点操作符用于指定你想要访问的是哪个对象的成员。
obj.x = 20; // 访问并修改成员变量x
obj.display(); // 调用成员函数display
5. 对象的复制
在C++中,当你将一个对象赋值给另一个同类型的对象时,会发生对象的复制。默认情况下,C++使用浅复制(shallow copy),这意味着新对象会获得原始对象成员变量的副本,但如果这些成员变量是指向动态分配内存的指针,则两个对象将共享同一块内存。为了避免这种情况,你可以定义自己的复制构造函数和赋值运算符。
6. 总结
C++中的对象是类的实例,它们具有类定义中声明的所有成员变量和成员函数。对象通过构造函数创建,通过析构函数销毁,并且它们的生命周期和内存占用由C++运行时环境管理。你可以通过点操作符来访问和操作对象的成员。
三、应用案例
C++ 类和对象的应用案例非常广泛,几乎可以涵盖任何需要面向对象编程的场景。下面,我将通过一个简单的案例来展示C++中类和对象的应用。
银行账户系统,在这个案例中,我们将定义一个BankAccount
类来表示银行账户,该类将包含账户的基本信息(如账户持有人姓名、账户余额)以及一些操作(如存款、取款、显示账户信息)。
1. 定义BankAccount类
#include <iostream>
#include <string>
class BankAccount {
private:
std::string owner; // 账户持有人姓名
double balance; // 账户余额
public:
// 构造函数
BankAccount(std::string name, double initBalance) : owner(name), balance(initBalance) {}
// 存款
void deposit(double amount) {
if (amount > 0) {
balance += amount;
std::cout << "存款成功,当前余额:" << balance << std::endl;
} else {
std::cout << "存款金额必须大于0!" << std::endl;
}
}
// 取款
void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
std::cout << "取款成功,当前余额:" << balance << std::endl;
} else {
std::cout << "取款失败,余额不足或取款金额必须大于0!" << std::endl;
}
}
// 显示账户信息
void display() {
std::cout << "账户持有人:" << owner << ", 当前余额:" << balance << std::endl;
}
};
int main() {
// 创建BankAccount对象
BankAccount account("张三", 1000.0);
// 调用成员函数
account.display(); // 显示账户信息
account.deposit(500.0); // 存款
account.withdraw(300.0); // 取款
account.display(); // 再次显示账户信息
return 0;
}
2. 分析
- 类定义:
BankAccount
类包含了私有成员变量owner
(账户持有人姓名)和balance
(账户余额),以及公有成员函数deposit
(存款)、withdraw
(取款)和display
(显示账户信息)。 - 构造函数:
BankAccount
类有一个构造函数,用于在创建对象时初始化账户持有人姓名和初始余额。 - 成员函数:
deposit
函数接受一个double
类型的参数amount
,表示要存入的金额。如果金额大于0,则更新余额并打印成功消息;否则,打印错误消息。withdraw
函数也接受一个double
类型的参数amount
,表示要取出的金额。如果金额大于0且不超过当前余额,则更新余额并打印成功消息;否则,打印错误消息。display
函数用于打印账户持有人的姓名和当前余额。
- 对象创建与操作:在
main
函数中,我们创建了一个BankAccount
对象account
,并使用其成员函数进行了存款、取款和显示账户信息的操作。
这个案例展示了C++中类和对象的基本用法,包括如何定义类、如何创建对象、如何访问对象的成员变量和成员函数,以及如何通过成员函数来操作对象的状态。
四、相关链接
- Visual Studio Code下载地址
- Sublime Text下载地址
- 「C++系列」C++简介、应用领域
- 「C++系列」C++ 基本语法
- 「C++系列」C++ 数据类型
- 「C++系列」C++ 变量类型
- 「C++系列」C++ 变量作用域
- 「C++系列」C++ 常量知识点-细致讲解
- 「C++系列」C++ 修饰符类型
- 「C++系列」一篇文章说透【存储类】
- 「C++系列」一篇文章讲透【运算符】
- 「C++系列」循环
- 「C++系列」判断
- 「C++系列」函数/内置函数
- 「C++系列」数字/随机数
- 「C++系列」数组
- 「C++系列」字符串
- 「C++系列」指针
- 「C++系列」引用
- 「C++系列」日期/时间
- 「C++系列」输入/输出
- 「C++系列」数据结构
- 「C++系列」vector 容器