目录
[四、class 和 struct 的区别](#四、class 和 struct 的区别)
一、面向过程和面向对象
在学习类和对象之前,先简单了解一下面向过程 和面向对象*。*
面向过程更关注解决问题的步骤。
比如外卖系统,如果用面向过程的方式思考,可能会关注:
cpp
用户下单 -> 商家接单 -> 骑手取餐 -> 骑手送餐 -> 用户收餐
也就是一步步完成流程。
面向对象更关注这个系统的对象,以及对象之间的关系。
比如外卖系统中,可以抽出:
cpp
用户
商家
骑手
订单
每个对象都有自己的属性和行为。
例如用户对象:
cpp
属性:姓名、电话、地址
行为:下单、付款、评价
商家对象:
cpp
属性:店铺名、菜单列表
行为:接单、出餐
骑手对象:
cpp
属性:姓名、电话、当前位置
行为:接单、取餐、配送
简单理解:
面向过程关注步骤,面向对象关注对象。
二、什么是类?
类可以理解为创建对象的模板。
比如"学生"是一个类,具体某一个学生就是一个对象。
类中可以包含:
- 成员变量:描述对象的属性;
- 成员函数:描述对象的行为。
例如:
cpp
class Student {
public:
char _name[20];
int _age;
void Print() {
cout << _name << " " << _age << endl;
}
};
这里 Student 就是一个类。
其中:
cpp
char _name[20];
int _age;
是成员变量。
cpp
void Print()
是成员函数。
三、什么是对象?
对象是根据类创建出来的具体变量。
例如:
cpp
Student s;
这里 s 就是一个 Student 类型的对象。
可以通过对象访问成员:
cpp
s._age = 18;
s.Print();
完整示例:
cpp
#include <iostream>
#include <cstring>
using namespace std;
class Student {
public:
char _name[20];
int _age;
void Print() {
cout << _name << " " << _age << endl;
}
};
int main() {
Student s;
strcpy(s._name, "Zhangsan");
s._age = 18;
s.Print();
return 0;
}
运行结果:
cpp
Zhangsan 18
四、class 和 struct 的区别
在C++中,class 和 struct 都可以来定义类。
他们都可以由成员变量和成员函数。
例如,struct 也可以这样写:
cpp
struct Student {
public:
char _name[20];
int _age;
void Print() {
cout << _name << " " << _age << endl;
}
};
但是 class 和 struct 有一个重要区别:
class 默认访问权限是 private,struct 的默认访问权限是 public。
例如:
cpp
calss Student {
int _age;
};
这里 _age 默认是私有的,类外面你不能直接访问。
而:
cpp
struct Student {
int _age;
};
这里 _age 默认是公有的,在类外面可以直接访问。
五、访问限定符
C++中常见的访问限定符有三个:
cpp
public
private
protected
现阶段先重点掌握 public 和 private。
1.public
public 修饰的成员,在类外可以直接访问。
cpp
class Student {
public:
int _age;
};
使用时:
cpp
Student s;
s._age = 18;
2.private
private 修饰的成员,只能在类里面访问,类外面不能直接访问。
cpp
class Student {
private:
int _age;
};
下面这种写法是错误的:
cpp
Student s;
s._age = 18; // 错误
如果想访问私有成员,一般要通过公有成员函数。
cpp
class Student {
private:
int _age;
public:
void setAge(int age) {
_age = age;
}
void Print() {
cout << _age << endl;
}
};
六、什么是封装?
封装是面向对象的三大特性之一。
面向对象的三大特性是:
cpp
封装性
继承性
多态性
现阶段先理解封装。
封装的意思是:
把数据和操作数据的方法放在一起,并通过访问权限控制外部访问。
例如:
cpp
class Student {
private:
char _name[20];
int _age;
public:
void SetInfo(const char* name, int age) {
strcpy(_name, name);
_age = age;
}
void Print() {
cout << _name << " " << _age << endl;
}
};
这里 _name 和 _age 是私有成员,类外不能直接修改。
外部只能通过 SetInfo 和 Print 这样的公有函数来操作对象。
这样做的好处是:
- 保护数据;
- 减少外部误操作;
- 让代码结构更清晰;
- 把数据和函数组织在一起。
七、类定义是要注意什么?
1.类定义结束后要加分号
cpp
class Student {
public:
int _age;
};
最后的分号不能少。
2.成员变量可以加前缀区分
很多代码中会把成员变量写成:
cpp
_name
_age
这样可以和普通变量区分开。
例如:
cpp
void SetAge(int age) {
_age = age;
}
这里 _age 是成员变量,age 是函数参数。
3.类里面可以写成员函数
C语言中的结构体主要放数据,而C++的类不仅可以放数据,也可以放函数。
这也是C++面向对象编程的重要体现。
八、小结
本篇主要学习了C++中类和对象的基本概念。
需要记住:
- 面向过程关注步骤,面向对象关注对象;
- 类是创建对象的模板;
- 对象是有类创建出来的具体变量;
- 类中可以有成员变量和成员函数;
- class 和 struct 的主要区别是默认访问权限不同;
- public 成员可以在类外访问;
- private 成员只能在类里面访问;
- 封装就是把数据和方法放在一起,并通过访问权限控制外部访问;
- 类定义后要加分号。
类和对象是C++中非常重要的内容,后面学习构造函数、析构函数、this指针、运算符重载、继承和多态时,都会建立在这个基础上。