C++ 类和对象:初学者指南
你好,未来的C++大师!我很激动能在这段令人兴奋的旅程中指导你学习C++的类和对象。作为一个教编程多年的老师,我可以告诉你,这个主题就像学习用乐高积木建造一样 —— 一旦你掌握了它,你将很快创造出令人惊叹的东西!
类和对象是什么?
在我们深入细节之前,先从一个简单的类比开始。想象一下你正在描述一辆汽车。汽车具有某些特性(颜色、型号、年份)并且可以执行某些动作(启动、停止、加速)。在C++中,类就像是汽车的蓝图,定义了所有汽车应该具有的属性和动作。然后,对象就是根据这个蓝图构建的具体汽车。
现在,让我们亲手写一些代码吧!
C++ 类定义
在C++中,我们使用class
关键字来定义一个类。以下是一个基本结构:
class Car {
// 类成员在这里
};
但这只是一个空的车库!让我们添加一些细节:
class Car {
public:
string color;
string model;
int year;
void start() {
cout << "汽车正在启动!" << endl;
}
void stop() {
cout << "汽车正在停止!" << endl;
}
};
让我们分解一下:
- 我们定义了一个名为
Car
的类。 - 在类内部,我们有数据成员(
color
、model
、year
)和成员函数(start()
、stop()
)。 -
public
关键字意味着这些成员可以从类的外部访问。
定义C++对象
现在我们有了汽车的蓝图,让我们创建一些实际的汽车!这就是对象的作用:
int main() {
Car myCar; // 创建Car类的一个对象
Car yourCar; // Car类的另一个对象
return 0;
}
恭喜你!你刚刚“制造”了两辆汽车。但它们现在还相当单调 —— 让我们给它们一些个性!
访问数据成员
要设置或获取汽车属性的值,我们使用点(.)运算符:
int main() {
Car myCar;
// 设置值
myCar.color = "红色";
myCar.model = "运动型";
myCar.year = 2023;
// 获取值
cout << "我的汽车是一辆" << myCar.color << " " << myCar.model << " " << myCar.year << "年的" << endl;
// 调用成员函数
myCar.start();
myCar.stop();
return 0;
}
输出:
我的汽车是一辆红色运动型2023年的
汽车正在启动!
汽车正在停止!
看到我们是如何与myCar
对象交互的吗?我们设置了它的颜色、型号和年份,然后打印了这些值,最后调用了它的成员函数。
类和对象的详细内容
现在我们已经掌握了基础知识,让我们进一步深入。在C++中,类通常有两个主要部分:
- 私有成员:这些只能在类内部访问。
- 公共成员:这些可以从类的外部访问。
以下是我们Car
类的改进版本:
class Car {
private:
string color;
string model;
int year;
bool isRunning;
public:
// 构造函数
Car(string c, string m, int y) {
color = c;
model = m;
year = y;
isRunning = false;
}
// 获取器方法
string getColor() { return color; }
string getModel() { return model; }
int getYear() { return year; }
// 其他方法
void start() {
if (!isRunning) {
isRunning = true;
cout << color << " " << model << "正在启动!" << endl;
} else {
cout << "汽车已经在运行了!" << endl;
}
}
void stop() {
if (isRunning) {
isRunning = false;
cout << color << " " << model << "正在停止!" << endl;
} else {
cout << "汽车已经停止了!" << endl;
}
}
};
这个版本引入了几个新概念:
- 私有成员:我们将数据成员设为私有,以实现更好的封装。
- 构造函数:这个特殊函数在创建对象时被调用,用于初始化其值。
- 获取器方法:这些方法允许受控地访问我们的私有数据成员。
-
改进的方法:我们的
start()
和stop()
方法现在会在行动前检查汽车的状态。
让我们看看如何使用这个改进的类:
int main() {
Car myCar("红色", "运动型", 2023);
cout << "我的汽车是一辆" << myCar.getColor() << " " << myCar.getModel()
<< " " << myCar.getYear() << "年的" << endl;
myCar.start();
myCar.start(); // 再次尝试启动
myCar.stop();
myCar.stop(); // 再次尝试停止
return 0;
}
输出:
我的汽车是一辆红色运动型2023年的
红色运动型正在启动!
汽车已经在运行了!
红色运动型正在停止!
汽车已经停止了!
这难道不酷吗?我们的汽车现在表现得更像是一辆真正的汽车 —— 如果它已经在运行,就不能再次启动,如果它已经停止,就不能再次停止。
方法表
以下是我们改进后的Car
类中的方法摘要表:
方法 | 描述 |
---|---|
Car(string c, string m, int y) |
构造函数:初始化一个新的Car对象 |
string getColor() |
返回汽车的颜色 |
string getModel() |
返回汽车的型号 |
int getYear() |
返回汽车的年份 |
void start() |
如果汽车没有运行,则启动汽车 |
void stop() |
如果汽车正在运行,则停止汽车 |
就这样!你刚刚构建了你的第一个C++类,并从中创建了对象。记住,熟能生巧,所以不要害怕尝试你自己的类和对象。也许可以尝试创建一个可以存储多个Car
对象的Garage
类?
继续编码,继续学习,最重要的是,玩得开心!在你意识到之前,你将能够教别人关于C++类和对象的奇迹。下次见,编码快乐!
Credits: Image by storyset