一、類(lèi)
- c++中可以使用struct、class來(lái)定義一個(gè)類(lèi)
- struct和class定義類(lèi)的區(qū)別:前者默認(rèn)成員權(quán)限是public,后者默認(rèn)成員權(quán)限是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[]) {
// 創(chuàng)建對(duì)象
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聲明的變量可以被訪(fǎng)問(wèn),可以在前面加個(gè)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++編程規(guī)范(參考規(guī)范)
- 全局變量:g_
- 成員變量:m_
- 靜態(tài)變量:s_
- 常量:c_
- 使用駝峰命名方法
三、this
- this 是指向當(dāng)前對(duì)象的指針
- 對(duì)象在調(diào)用成員函數(shù)的時(shí)候,會(huì)自動(dòng)傳入當(dāng)前對(duì)象的內(nèi)存地址
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給外界去訪(fǎng)問(wèn)成員變量
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;
四、內(nèi)存空間的布局
每個(gè)應(yīng)用都有自己獨(dú)立的內(nèi)存空間,其內(nèi)存空間一般都有以下幾大區(qū)域 ?代碼段(代碼區(qū))
- 代碼段(代碼區(qū))
用于存放代碼 - 數(shù)據(jù)段(全局區(qū))
用于存放全局變量等 - 棧空間
1、每調(diào)用一個(gè)函數(shù)就會(huì)給它分配一段連續(xù)的棧空間,等函數(shù)調(diào)用完畢后會(huì)自動(dòng)回收這段- 棧空間
2、自動(dòng)分配和回收 - 堆空間
需要主動(dòng)去申請(qǐng)和釋放
內(nèi)存布局
四、堆空間
在程序運(yùn)行的過(guò)程中,為了能自主的控制內(nèi)存的生命周期和大小 會(huì)經(jīng)常使用堆空間內(nèi)存
對(duì)空間的申請(qǐng)和釋放
1、malloc/free
2、new/delete
3、new []/delete []注意
1、申請(qǐng)空間成功后,會(huì)返回那一段內(nèi)存的空間地址
2、申請(qǐng)和釋放必須是一對(duì)一的關(guān)系,不然會(huì)內(nèi)存泄露
五、memset
- memset函數(shù)是將較大的數(shù)據(jù)結(jié)構(gòu)(比如對(duì)象、數(shù)組等)內(nèi)存清零的比較快的方法
Person person;
person.m_id = 1;
person.m_age = 10;
person.m_height = 30;
memset(&person, 0, sizeof(Person));
六、對(duì)象的內(nèi)存
- 對(duì)象的內(nèi)存可以存在于3種地方
- 全局區(qū):全局變量
- 棧空間:函數(shù)里面的局部變量
- 堆空間: 動(dòng)態(tài)申請(qǐng)內(nèi)存(malloc、new等)
七、構(gòu)造函數(shù)
- 構(gòu)造一般用于完成對(duì)象的初始化工作
- 特點(diǎn)
1、函數(shù)名與類(lèi)名相同,無(wú)返回值,void都不能寫(xiě),可以傳參數(shù),可以重載,可以有多個(gè)構(gòu)造函數(shù)
2、一旦定義了構(gòu)造函數(shù),必須用其中一個(gè)自定義的構(gòu)造函數(shù)來(lái)初始化對(duì)象
3、通過(guò)malloc分配空間的對(duì)象不會(huì)調(diào)用構(gòu)造函數(shù)
4、如果自定義了構(gòu)造函數(shù),除了全局區(qū),其他內(nèi)存空間的成員變量默認(rèn)都不會(huì)被初始化,需要開(kāi)發(fā)人員手動(dòng)初始化
struct Person {
int m_age;
Person(){
cout << "Person()" << endl;
}
Person(int age){
cout << "Person(int age)" << endl;
}
};