1. 类与对象的概念
类:类是对同一类对象的抽象总结,是一个概念。
对象:按照类的规定创建的实体。
程序员就是面向对象编程世界中的“上帝”,因此需要先写类的代码,才能按照这段代码创建对应的对象。参考类来创建对象的过程被称为“实例化”。因此,对象无法脱离对应的类存在。
一个类主要包括:
- 属性
用来描述对象的数据元素,通常是一个名词变量,例如:身高、体重、价格等,也称为“成员变量”或“数据成员”。
- 行为
用来描述对象执行的具体操作,通常对属性进行操作,以动词函数的方式存在,例如:吃饭、睡觉、运行等,也称为“成员函数”或“成员方法”。
成员变量和成员函数统称为“成员”。
2. 类的定义
【例子】以手机为例,来说明类的定义。
规定手机的属性:品牌、型号和重量
手机的成员函数:运行游戏、播放音乐、通信
#include <iostream>
using namespace std;
class MobilePhone // 帕斯卡命名法:所有单词的首字母大写
{
public: // 公有权限:最开放的一种权限
string brand; // 品牌
string model; // 型号
int weight; // 重量
void run_game() // 运行游戏
{
cout << "arknights" << endl;
}
void play_music()
{
cout << "东方绯想天" << endl;
}
void communicate()
{
cout << "你好" << endl;
}
};
int main()
{
return 0;
}
3. 实例化对象
类是一个抽象的概念,因此需要按照这个概念创建对应的对象实体,C++中有两种类型的对象:
- 栈内存对象
在生命周期结束(所在的花括号执行完)后,自动被销毁。
栈内存对象使用 . 调用成员。
- 堆内存对象
需要使用new关键字创建,使用delete关键字销毁,如果不销毁,则会持续存在,容易导致内存泄漏的问题,内存泄漏最终可能会导致程序卡顿,甚至卡死。
堆内存对象通常使用指针来保存堆内存对象的地址。
堆内存对象使用 -> 调用成员,在Qt Creator下,直接打.会转换成 ->
#include <iostream>
using namespace std;
class MobilePhone // 帕斯卡命名法:所有单词的首字母大写
{
public: // 公有权限:最开放的一种权限
string brand; // 品牌
string model; // 型号
int weight; // 重量
void run_game() // 运行游戏
{
cout << "arknights" << endl;
}
void play_music()
{
cout << "东方绯想天" << endl;
}
void communicate()
{
cout << "你好" << endl;
}
};
int main()
{
// 栈内存对象
MobilePhone mp1;
// 调用属性
mp1.brand = "小米";
mp1.model = "13 Pro";
mp1.weight = 216;
cout << mp1.brand << " " << mp1.model << " "
<< mp1.weight << endl;
// 调用成员函数
mp1.communicate();
mp1.play_music();
mp1.run_game();
// 堆内存对象
MobilePhone* mp2 = new MobilePhone;
// 调用属性
mp2->brand = "红米";
mp2->model = "K60 Pro";
mp2->weight = 206;
cout << mp2->brand << " " << mp2->model << " " <<
mp2->weight << endl;
// 调用成员函数
mp2->communicate();
mp2->play_music();
mp2->run_game();
// 手动销毁mp2
delete mp2;
// 有时销毁后还能使用部分功能,但是不要这么做
mp2 = NULL; // 可以赋值为NULL防止delete后调用
return 0;
}
// 主函数执行完,mp1销毁