一、类
- c++中可以使用struct、class来定义一个类
- struct和class定义类的区别:前者默认成员权限是public,后者默认成员权限是private
#include <iostream>
using namespace std;
struct Person {
int m_id;
int m_age;
int m_height;
void display() {
cout << "m_id" << m_id << endl;
cout << "m_age" << m_age << endl;
cout << "m_height" << m_height << endl;
}
};
class Student {
int m_id;
int m_age;
int m_height;
void display() {
cout << "m_id" << m_id << endl;
cout << "m_age" << m_age << endl;
cout << "m_height" << m_height << endl;
}
};
int main(int argc, const char * argv[]) {
// 创建对象
Person person;
person.m_id = 10;
person.m_age = 20;
person.m_height = 30;
person.display();
Student student;
student.m_id = 10;
student.m_age = 20;
student.m_height = 30;
student.display();
return 0;
}
示例.png
要想class声明的变量可以被访问,可以在前面加个public
class Student {
public:
int m_id;
int m_age;
int m_height;
void display() {
cout << "m_id" << m_id << endl;
cout << "m_age" << m_age << endl;
cout << "m_height" << m_height << endl;
}
};
二、C++编程规范(参考规范)
- 全局变量:g_
- 成员变量:m_
- 静态变量:s_
- 常量:c_
- 使用驼峰命名方法
三、this
- this 是指向当前对象的指针
- 对象在调用成员函数的时候,会自动传入当前对象的内存地址
struct Person {
int m_id;
int m_age;
int m_height;
void display() {
cout << "m_id " << this->m_id << endl;
cout << "m_age " << this->m_age << endl;
cout << "m_height " << this->m_height << endl;
}
};
三、封装
- 成员变量私有化,提供公共的getter和setter给外界去访问成员变量
class Teacher {
int m_age;
public:
void setAge(int age){
this->m_age = age;
}
int getAge(){
return this->m_age;
}
};
Teacher teacher;
teacher.setAge(20);
cout << teacher.getAge() << endl;
四、内存空间的布局
每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域 代码段(代码区)
- 代码段(代码区)
用于存放代码 - 数据段(全局区)
用于存放全局变量等 - 栈空间
1、每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段- 栈空间
2、自动分配和回收 - 堆空间
需要主动去申请和释放
四、堆空间
-
在程序运行的过程中,为了能自主的控制内存的生命周期和大小 会经常使用堆空间内存
-
对空间的申请和释放
1、malloc/free
2、new/delete
3、new []/delete [] -
注意
1、申请空间成功后,会返回那一段内存的空间地址
2、申请和释放必须是一对一的关系,不然会内存泄露
五、memset
- memset函数是将较大的数据结构(比如对象、数组等)内存清零的比较快的方法
Person person;
person.m_id = 1;
person.m_age = 10;
person.m_height = 30;
memset(&person, 0, sizeof(Person));
六、对象的内存
- 对象的内存可以存在于3种地方
- 全局区:全局变量
- 栈空间:函数里面的局部变量
- 堆空间: 动态申请内存(malloc、new等)
七、构造函数
- 构造一般用于完成对象的初始化工作
- 特点
1、函数名与类名相同,无返回值,void都不能写,可以传参数,可以重载,可以有多个构造函数
2、一旦定义了构造函数,必须用其中一个自定义的构造函数来初始化对象
3、通过malloc分配空间的对象不会调用构造函数
4、如果自定义了构造函数,除了全局区,其他内存空间的成员变量默认都不会被初始化,需要开发人员手动初始化
struct Person {
int m_age;
Person(){
cout << "Person()" << endl;
}
Person(int age){
cout << "Person(int age)" << endl;
}
};
网友评论