C++类/构造函数/析构函数/成员函数
来源:互联网 发布:网络正常 微信不能用 编辑:程序博客网 时间:2024/06/04 23:24
主要知识点:
类的定义–类的成员属性–构造函数–析构函数–成员函数–类的本质与this指针
类的定义
定义一个类,包含成员数据和成员函数
class 类的名称 {
// 数据属性 存储数据的 类的数据域 数据成员
// 方法属性 功能属性 完成特定功能的代码块 类的方法域
};
class类似于结构体,C++里面结构体也是一种类,定义后编译器也会将其当作一种数据类型。
类的成员属性
1:private私有属性:有该类的成员函数才能使用的数据成员或成员方法。;
2:protected 保护属性:只有该类和该类的继承类内部的成员函数才能使用的成员数据和成员方法。
3:public 共有属性:所有的对象的实例能直接访问这个数据成员或成员方法;
定义数据成员
成员属性(私有的,共有的,保护的):
一般定义成员属性后会换行,相同属性的数据成员可以定义在一起,好的编程习惯是将代码逻辑一致的数据成员公用一个属性。
class rect_shape { // 类名
private: // 坐标属性
float x;
float y;
float w;
float h;
// 逻辑是分开的
private:
int id;
}; // 结尾分号
定义类的成员函数
成员函数的属性(public, private, protected):
函数返回类型 函数名称(参数1, 参数2…);
实现成员函数
方法1: 将成员函数实现在类的定义里面;
class rect_shape {
private: // 坐标属性
float x;
float y;
float w;
float h;
public:
// 成员函数
void render_shape();
// 成员函数
void set_rect(float x, float y, float w, float h) {
}
private:
void init_rect(float x, float y, float w, float h);
}; // 结尾分号;
构造函数
类实例化的时候会调用构造函数,构造函数是类的数据成员初始化的地方,编译器除了会分配类所需要的内存,还会调用构造函数。
构造函数初始化数据成员的方法:
A: 普通的在构造函数里面初始化;
B: 使用初始化列表;
构造函数定义
A:一般将构造函数定义为public属性,也有其它属性的;
B: 没有返回类型
C:函数的名称必须和类名称一样;
D: 作用是在构造一个实例的时候会调用;
给一个类分配内存的时候就会调用构造函数,默认的构造函数是一个空函数,类的名称() {}。
析构函数
销毁对象实例的时候会调用析构函数;
Step1: 调用析构函数;
Step2: 回收对象实例所占的内存;
析构函数是释放对象所占用资源的最后一个地方。
析构函数的定义:
函数名称 ~类的名称(没有参数);没有返回类型;
实例与销毁
Step1: 分配内存
Step2: 调用构造函数;
// 使用
….
// 使用完成
Step3: 调用析构函数
Step4: 回收内存
局部变量实例的内存在栈上;变量对应在函数外面,实例的内存分配在数据段;同样可以使用动态内存分配,但是C++有特定的用法,不能直接用malloc;构造函数就是类的实例的数据初始化的地方;成员方法能直接使用成员变量;
成员函数
成员函数的定义
A: 成员函数的属性是属于private, protected, public
B: 成员函数的返回值,函数名称以及参数;
成员函数的调用
Case 1: 类的其它函数来调用这个成员函数;
Case 2: 对于public成员函数,对象实例.成员函数来调用;
Case 3: 对于public成员函数,对象指针->成员函数来调用;
类的本质与this指针
1:类的实例的内存大小
在将一个类实例化的时候,只会给类的数据域分配内存。
2: 类的方法和C语言的函数一样,本质是一个函数。编译器在调用这个函数的时候,首先将类的实例的对象的地址传递给寄存器,然后通过寄存器获得实例的地址从而访问实例的数据域;C++里面会在调用类的成员函数的时候,先将类的实例的地址传递给成员函数。这样,才能访问到这个实例里面的数据成员;
3: 这个实例的内存地址在成员函数里面就是this指针;
4:实例化一个类
Step1:给这个类 分配内存; // 这段内存,就是这个类的实例;
Step2:调用这个类的构造函数;
类相当于定义的一种高级数据类型;
5:C++ 类的实例的内存分布:
C++类的内存大小是由数据部分组成的,数据部分包括数据成员的内存以及其它;在外面的成员函数里面操作的每一个数据成员,是类的实例的对应数据内存;
6: C++的成员函数的代码,也是编译在代码段的。
C++的成员函数调用步骤:
Step1: 传递一个实例的地址到一个寄存器;(使用一个寄存器来存放实例的地址);VS的编译器使用的是ECX来存放实例的地址;
Step2: 给参数分配内存;
Step3: 给参数赋值
Step4: 保存下一个指令执行的地方
Step5: 保存栈的位置;
Step6:将指令指针跳到成员函数;
this指针是在调用成员函数之前,先将这个对象实例的内存地址传递给一个寄存器,然后在成员函数的内部使用这个地址取得里面的数据成员;
- ASP 类成员变量、成员函数、构造析构函数
- C++类/构造函数/析构函数/成员函数
- 【C++】类构造函数 & 析构函数
- 成员函数 构造函数
- C++的静态成员函数,成员变量,构造函数,析构函数,拷贝构造函数
- C++类 实例 数据成员 成员函数 构造函数 析构函数
- 类的构造函数、析构函数、成员函数与赋值函数
- C++基础4:构造函数、析构函数、拷贝构造函数、静态成员函数
- 构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
- C#类成员-构造函数
- 构造函数和析构函数【c++】
- c++-构造函数与析构函数
- C++-构造函数,析构函数
- [c++]构造函数和析构函数
- C++--构造函数与析构函数
- 【C#】构造函数和析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- git拉取代码中git stash和git stash pop的使用
- 构建spring+springdata +jpa+springmvc项目
- 【腾讯TMQ】从0开始做后台测试
- 背包问题基础(三种背包)
- Linux搭建开发环境(svn,jdk,tomcat,mysql,maven)
- C++类/构造函数/析构函数/成员函数
- springboot定时任务的使用
- maven工程建立父包parent报错
- singleTop模式应用场景 以及OnNewIntent
- Servlet简单实例1
- Java设计模式之迭代器模式
- C++ inline内联函数使用规则
- ConstraintLayout 属性详解 和Chain的使用
- 关于php与js传递cookie中文值编码问题