C++ 类和对象:初学者指南

你好,未来的C++大师!我很激动能在这段令人兴奋的旅程中指导你学习C++的类和对象。作为一个教编程多年的老师,我可以告诉你,这个主题就像学习用乐高积木建造一样 —— 一旦你掌握了它,你将很快创造出令人惊叹的东西!

C++ Classes & Objects

类和对象是什么?

在我们深入细节之前,先从一个简单的类比开始。想象一下你正在描述一辆汽车。汽车具有某些特性(颜色、型号、年份)并且可以执行某些动作(启动、停止、加速)。在C++中,类就像是汽车的蓝图,定义了所有汽车应该具有的属性和动作。然后,对象就是根据这个蓝图构建的具体汽车。

现在,让我们亲手写一些代码吧!

C++ 类定义

在C++中,我们使用class关键字来定义一个类。以下是一个基本结构:

class Car {
// 类成员在这里
};

但这只是一个空的车库!让我们添加一些细节:

class Car {
public:
string color;
string model;
int year;

void start() {
cout << "汽车正在启动!" << endl;
}

void stop() {
cout << "汽车正在停止!" << endl;
}
};

让我们分解一下:

  1. 我们定义了一个名为Car的类。
  2. 在类内部,我们有数据成员(colormodelyear)和成员函数(start()stop())。
  3. 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++中,类通常有两个主要部分:

  1. 私有成员:这些只能在类内部访问。
  2. 公共成员:这些可以从类的外部访问。

以下是我们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;
}
}
};

这个版本引入了几个新概念:

  1. 私有成员:我们将数据成员设为私有,以实现更好的封装。
  2. 构造函数:这个特殊函数在创建对象时被调用,用于初始化其值。
  3. 获取器方法:这些方法允许受控地访问我们的私有数据成员。
  4. 改进的方法:我们的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