类和对象的学习1
- @[TOC](类和对象的学习1
- 一、类的定义
- 1.类定义格式
- 2.访问限定符
- 二、实例对象
- 1.实例
- 3.对象大小
- 4. this指针
- 5.⾯向对象三⼤特性“封装、继承、多态”中的封装)
类和对象的学习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⽤类名就很⽅便。