当前位置: 首页 > article >正文

类和对象的学习1

类和对象的学习1

  • @[TOC](类和对象的学习1
    • 一、类的定义
      • 1.类定义格式
      • 2.访问限定符
    • 二、实例对象
      • 1.实例
      • 3.对象大小
      • 4. this指针
      • 5.⾯向对象三⼤特性“封装、继承、多态”中的封装)

一、类的定义

1.类定义格式

1.1 class为定义类的关键字,Stack为类的名字,{}中为类的主体,在}的和后面加上分号。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。

1.2 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,一般会在成员变量前面加_或者其他的。

1.3 C++里面struct也可以定义类,用struct定义类和class定义类之间有区别。

1.4 定义在类⾯的成员函数默认为inline。

2.访问限定符

2.1 访问限定符有3个:private/protected/public。

2.2 public修饰的成员在类外可以直接被访问;protected和private修饰的成员在类外不能直接被访问。

2.3 class定义成员没有被访问限定符修饰时默认为private,struct默认为public。

2.4 成员变量一般会被定义为private或是protected,成员函数会被定义成public

class SeqList 
{
	public:
	void Init()
	{
		_size = _capacity = 0;
		_arr = nullptr;
	}
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
int main()
{
	SeqList sl;
	sl.Init();
	return 0;
}
```cpp
在这里插入代码片

### 3、类域
3.1 类定义了⼀个新的作⽤域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使⽤ :: 作
⽤域操作符指明成员属于哪个类域。
3.2  声明和定义分离,需要指定类域。

```cpp
class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}

二、实例对象

1.实例

1.1 ⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。
1.2类是对象进⾏⼀种抽象描述,是⼀个模型⼀样的东西。这些成员变量只是声明,没有分配空间,⽤类实例化出对象时,才会分配空间。

class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}
int main()
{
	SeqList sl;//这个就是实例化;
	sl.Init();
	return 0;
}

3.对象大小

内存对⻬规则
• 第⼀个成员在与结构体偏移量为0的地址处。
• 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。
• 注意:对⻬数 = 编译器默认的⼀个对⻬数 与 该成员⼤⼩的较⼩值。
• VS中默认的对⻬数为8
• 结构体总⼤⼩为:最⼤对⻬数(所有变量类型最⼤者与默认对⻬参数取最⼩)的整数倍。
• 如果嵌套了结构体的情况,嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处,结构体的整体⼤⼩
就是所有最⼤对⻬数(含嵌套结构体的对⻬数)的整数倍。

#include<iostream>
using namespace std;
class SeqList 
{
	public:
	void Init();
private:
	int* _arr;
	int  _size;
	int  _capacity;
};
void SeqList::Init()
{
	_size = _capacity = 0;
	_arr = nullptr;
}
int main()
{
	SeqList sl;
	sl.Init();
	cout << sizeof(sl) << endl;//int是4个字节,3个int,12个字节, VS中默认的对⻬数为8,所以结果是16
	return 0;
}

在这里插入图片描述

没有成员变量的对象的⼤⼩是,因为如果⼀个字节都不给,怎么表⽰对象存在过呢!所以这⾥给1字节,是为了占位标识对象存在。
在这里插入图片描述

4. this指针

4.1在C++中,this是一个关键字,用于表示当前对象的指针。在成员函数内部,this指针总是指向调用该函数的对象。这样就可以在成员函数中访问对象的成员变量和成员函数。
4.2 this指针是一个指向调用当前成员函数的对象的指针,它指向的是类的非静态成员。在成员函数中,可以使用this指针来访问成员变量和成员函数。
4.3


```cpp
class Time
{
public:
	void init(int year,int month,int day)
	{
		year = year;//前面的year是成员变量的year,前面有一个隐含的this指针,指向该对象的成员变量
		month = month;//this指针是隐藏的
		day = day;
	}
private:
	int year;
	int month;
	int day;
};
int main()
{
	Time t1;
	t1.init(1, 1, 1);
	
	return 0;
}

this指针存在内存的栈区域的

5.⾯向对象三⼤特性“封装、继承、多态”中的封装)

5.1 C++中数据和函数都放到了类⾥⾯,通过访问限定符进⾏了限制,不能再随意通过对象直接修改数
据,这是C++封装的⼀种体现。
5.2 C++中有⼀些相对⽅便的语法,⽐如Init给的缺省参数会⽅便很多,成员函数每次不需要传对象地
址,因为this指针隐含的传递了,⽅便了很多,使⽤类型不再需要typedef⽤类名就很⽅便。


http://www.kler.cn/news/335930.html

相关文章:

  • 【2024年最新】基于springboot+mysql就业信息管理系统
  • CSP-J/S 复赛算法 树形动态规划
  • 【目标检测】集装箱缺陷检测数据集1476张5类缺陷VOC+YOLO格式
  • 第二十四讲-进度控件QProgressBar
  • Kubernetes-Dashboard篇-01-为集群搭建Dashboard
  • Spring Boot 基于 Mockito 单元测试
  • 基于Springboot的宠物咖啡馆平台的设计与实现(源码+定制+参考)
  • JavaEE 多线程第一节 (进程 线程 并行 并发 概念及关系)
  • ChatGPT写论文全流程揭秘:从构思到成稿!
  • 九大排序之插入排序
  • 短视频时代,网站建设存在的意义还有多大?
  • OpenAI 推出 SearchGPT - 它可以做什么以及如何访问?
  • 三、数据链路层(下)
  • [C#]C# winform部署yolov11-pose姿态估计onnx模型
  • 电子信息类专业技术学习及比赛路线总结(大一到大三)
  • 北京市大兴区启动乐享生活 寻味大兴 美食嘉年华 系列促销费活动
  • World of Warcraft [CLASSIC] Jewelcrafting Gemstone
  • 英语二小作文大作文的一些作文例句
  • 项目定位与服务器(SERVER)模块划分
  • Python in Excel 正式发布!