1. 程式人生 > >C++ 第四天

C++ 第四天

一、this指標
1.1 什麼是this 指標
指向當前物件的指標
建構函式中this指向正在被構建的物件首地址
成員函式中 this代表呼叫這個函式的物件的首地址
1.2 this指標的應用
區分成員變數 和函式引數
this 可以作為函式引數
this 可以作為返回值(實現連續操作)
二、const物件和const函式
const物件就是加了const修飾物件
const A a;
const 函式就是加了const修飾的成員函式
class A{
public:
void show()const{
/*這就是const函式*/
}
void show(){
/*這就是非const函式*/
}
};
1.2 規則
const 函式和非const函式可以構成過載關係
const 物件只能呼叫const函式
const 函式中只能讀成員變數 不能修改成員變數的值 也不能呼叫非const的成員函式
如果非要在const函式中去修改成員變數 只要在修飾的成員變數上 加一個mutable修飾
非const物件優先呼叫非const函式,如果沒有非const函式則呼叫const函式。
#include <iostream>
using namespcae std;
class A{
mutable int data;
public:
/*_ZK1A4showEv*/
void show(){
cout << "show()" << endl;
}
/*_ZNK1A4showEv*/
void show()const{
cout << "show()const" << endl;
data=1101;
cout << data << endl;
}
}
int main(){
A var_a;
var_a.show();
const A var_b=var_a;
var_b.show();
}

三、解構函式
3.1解構函式和建構函式同名 在函式名前加~,這個函式是無參的所以一個型別中
只有一個解構函式
3.2作用
可以在一個物件銷燬之前 自動呼叫一次。
用來釋放記憶體 釋放資源
3.3 記憶體相關的兩個操作
建構函式 分配記憶體
解構函式 釋放記憶體
#include <iostream>
using namespcae std;
class A{
int *data;
public:
/*建構函式中分配記憶體*/
A():data(new int(10)){
/*data= new int(10)*/
cout << "A()" << endl;
}
/*解構函式 負責釋放記憶體*/
~A(){
cout << "~A()" << endl;
delete data;
}
};
int main(){
A *pa = new A[5];//建立5個物件
delete[] pa;
}

四.new delete 比malloc free
new 比malloc多做了一些事
1、如果型別中有類型別的成員 new會自動構建這個成員
2、new 會自動處理型別轉換
3、new 會自動呼叫建構函式
delete 比free多呼叫了一次解構函式
#include <iostream>
using namespcae std;
struct Date{
int year;
int month;
int day;
Date(){
cout << "Date()" << endl;
}
~Date(){
cout << "~Date()" << endl;
}
};
class Person{
int age;
Date date;
public:
Person(){
cout << "Person()" << endl;
}
~Person(){
cout << "~Person()" << endl;
}
};
int main(){
Person *p=static_cast<Person*>malloc(sizeof(Person));
free(p);
Person *p2 = new Person();
delete p2;
}