C++学习笔记12:类和对象入门

目录

一、面向过程和面向对象

二、什么是类?

三、什么是对象?

[四、class 和 struct 的区别](#四、class 和 struct 的区别)

五、访问限定符

1.public

2.private

六、什么是封装?

七、类定义是要注意什么?

1.类定义结束后要加分号

2.成员变量可以加前缀区分

3.类里面可以写成员函数

八、小结


一、面向过程和面向对象

在学习类和对象之前,先简单了解一下面向过程面向对象*。*

面向过程更关注解决问题的步骤。

比如外卖系统,如果用面向过程的方式思考,可能会关注:

cpp 复制代码
用户下单 -> 商家接单 -> 骑手取餐 -> 骑手送餐 -> 用户收餐

也就是一步步完成流程。

面向对象更关注这个系统的对象,以及对象之间的关系。

比如外卖系统中,可以抽出:

cpp 复制代码
用户
商家
骑手
订单

每个对象都有自己的属性和行为。

例如用户对象:

cpp 复制代码
属性:姓名、电话、地址
行为:下单、付款、评价

商家对象:

cpp 复制代码
属性:店铺名、菜单列表
行为:接单、出餐

骑手对象:

cpp 复制代码
属性:姓名、电话、当前位置
行为:接单、取餐、配送

简单理解:

面向过程关注步骤,面向对象关注对象。


二、什么是类?

类可以理解为创建对象的模板。

比如"学生"是一个类,具体某一个学生就是一个对象。

类中可以包含:

  1. 成员变量:描述对象的属性;
  2. 成员函数:描述对象的行为。

例如:

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. 保护数据;
  2. 减少外部误操作;
  3. 让代码结构更清晰;
  4. 把数据和函数组织在一起。

七、类定义是要注意什么?

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++中类和对象的基本概念。

需要记住:

  1. 面向过程关注步骤,面向对象关注对象;
  2. 类是创建对象的模板;
  3. 对象是有类创建出来的具体变量;
  4. 类中可以有成员变量和成员函数;
  5. class 和 struct 的主要区别是默认访问权限不同;
  6. public 成员可以在类外访问;
  7. private 成员只能在类里面访问;
  8. 封装就是把数据和方法放在一起,并通过访问权限控制外部访问;
  9. 类定义后要加分号。

类和对象是C++中非常重要的内容,后面学习构造函数、析构函数、this指针、运算符重载、继承和多态时,都会建立在这个基础上。

相关推荐
天若有情6731 小时前
自制C++万能字符串流式库 formort.h|对标标准库endl,零拷贝链式拼接神器
开发语言·c++
wangjialelele1 小时前
【SystemV】基于建造者模式的信号量
linux·c语言·c++·算法·建造者模式
朔北之忘 Clancy2 小时前
2026 年 3 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·一级
信奥胡老师3 小时前
B3930 [GESP202312 五级] 烹饪问题
开发语言·数据结构·c++·学习·算法
许长安3 小时前
Redis 跳表实现详解
数据库·c++·经验分享·redis·笔记·缓存
paeamecium3 小时前
【PAT甲级真题】- Shortest Distance (20)
数据结构·c++·算法·pat考试·pat
REDcker3 小时前
C++循环与编译器优化详解 别名不变量向量化与GCC Clang验证及perf实践
java·jvm·c++·c·clang·gcc
不剪发的Tony老师3 小时前
Code::Blocks:一款免费开源的C/C++/Fortran集成开发环境
c语言·c++·ide
咩咦3 小时前
C++学习笔记10:auto关键字
c++·学习笔记·c++11·auto·类型推导