类与对象的概念¶
想象一下,你想造一个“机器人”来帮你处理日常事务。这个机器人需要有自己的“身体特征”(比如名字、电量)和“行为能力”(比如走路、说话)。在编程里,我们把这些“身体特征”称为成员变量(属性),把“行为能力”称为成员函数(方法)。而“机器人”本身,就是我们要讨论的“类”的一个“实例”——也就是对象。
简单说,类是对一类事物的抽象描述,定义了这个事物有什么(属性)和能做什么(行为);对象是根据这个描述具体创建出来的“个体”。在C++中,我们用class关键字来定义类,然后通过这个类创建对象,使用类里的成员变量和成员函数。
C++中类的定义语法¶
定义一个类的基本格式如下:
class 类名 {
// 成员变量(属性):描述对象的特征,通常设为private(私有),保证安全性
private:
数据类型 变量名1;
数据类型 变量名2;
// ... 其他成员变量
// 成员函数(方法):描述对象的行为,通常设为public(公有),供外部调用
public:
// 成员函数的声明,比如设置变量、获取变量、执行行为等
返回类型 函数名1(参数列表) {
// 函数体:具体实现行为
}
返回类型 函数名2(参数列表) {
// ...
}
// ... 其他成员函数
};
class关键字:用于声明一个类。private和public:是访问权限修饰符。private成员只能在类内部被访问,public成员可以被类外部的代码直接访问。- 分号:类定义的末尾必须有分号,这是语法要求。
定义一个简单的“学生”类¶
我们来定义一个“学生”类,让它包含基本的学生信息和行为。
步骤1:定义类的结构¶
假设学生有两个核心属性:姓名(name)和学号(id),以及两个行为:学习(study)和自我介绍(introduce)。
class Student {
private: // 私有成员:外部不能直接访问,保证数据安全
string name; // 姓名(字符串类型)
int id; // 学号(整数类型)
public: // 公有成员:外部可以直接调用的函数
// 设置姓名的函数(参数:要设置的姓名)
void setName(string n) {
name = n; // 将参数赋值给成员变量name
}
// 获取姓名的函数(返回值:当前姓名)
string getName() {
return name; // 返回成员变量name的值
}
// 设置学号的函数(参数:要设置的学号)
void setId(int i) {
id = i; // 将参数赋值给成员变量id
}
// 自我介绍函数:输出学生的姓名和学号
void introduce() {
cout << "大家好!我叫" << name << ",学号是" << id << "。" << endl;
}
// 学习函数:输出学生正在学习的信息
void study() {
cout << name << "正在努力学习C++!" << endl;
}
};
创建对象并使用类¶
定义完类后,我们需要创建对象(即具体的学生实例),并通过对象调用类的成员函数。
步骤2:在main函数中使用Student类¶
#include <iostream>
#include <string> // 因为用了string类型,需要包含这个头文件
using namespace std; // 简化代码,不用写std::
int main() {
// 1. 创建一个Student类的对象,命名为stu1
Student stu1;
// 2. 设置学生的姓名和学号(通过public成员函数)
stu1.setName("张三"); // 调用setName函数,传入姓名
stu1.setId(2023001); // 调用setId函数,传入学号
// 3. 调用成员函数
stu1.introduce(); // 输出自我介绍
stu1.study(); // 输出学习信息
return 0;
}
运行结果¶
编译并运行上述代码,你会看到输出:
大家好!我叫张三,学号是2023001。
张三正在努力学习C++!
关键知识点总结¶
- 类的定义:用
class关键字,包含私有成员变量(private)和公有成员函数(public)。 - 对象创建:
类名 对象名;(如Student stu1;)。 - 成员访问:对象通过
对象名.成员函数名()调用公有函数(如stu1.study()),成员变量通过set/get函数间接访问(如stu1.setName())。 - 封装思想:成员变量设为
private,仅通过public函数访问,避免外部直接修改数据,保证数据安全性。
通过这个简单的例子,你已经掌握了C++类与对象的基础:如何定义类、创建对象、调用成员函数。后续可以尝试扩展类的功能(比如添加年龄、成绩等属性,或更多行为),深入学习封装、继承等概念。