成員變數和成員函式分開儲存:
在c++中,類內的成員變數和成員函式分開儲存
第一點:空物件占用記憶體空間1個位元組
第二點:只有非靜態成員變數才屬於類的物件上,非靜態成員函式和靜態成員函式和靜態成員變數不屬於類的物件上
示例**如下:結果為4個位元組
#include#includeusing namespace std;
class person // 非靜態成員函式 不屬於類的物件
static void s_func() {}// 靜態成員函式 不屬於類的物件
};int person::m_b = 1;
void test01()
int main()
this指標概念:
this指標指向被呼叫的成員函式所屬的物件
特點1:this指標是隱含每乙個非靜態成員函式內的一種指標
特點2:this指標不需要定義,直接使用即可
this指標的用途:
1、當形參和成員變數同名時,可用this指標來區分
2、在類的非靜態成員函式中返回物件本身,可使用return *this
示例:①所指的**這種輸出的資料是錯誤的,原因就是形參和成員變數同名,編譯器就不知道age=age
到底是生成了乙個age給age賦值,還是給自身的物件age賦形參的值,所以我們可以通過this指標來解決問題,this指標指向被呼叫的成員所屬的物件
#include#includeusing namespace std;
class person
public:
int age;
};void test01()
int main()
第二點:在類的非靜態成員函式中返回物件本身,可使用return *this
示例
#include#includeusing namespace std;
class person
person & addage()
public:
int age;
};void test01()
int main()
拓展:聽老師說如果把person類中定義的person & addage()
的&
去掉的話,那麼結果會是什麼呢?
結果:輸出28,那麼只加了一次,那麼後面的addage都去哪了呢?
答案:當person addage()
方式是以值傳遞的方式返回物件,那麼就會進行拷貝建構函式,複製乙個新的物件返回
記住一點:當&修飾的時候,返回的是本體,當&沒用修飾的時候 返回乙個新的物件
空指標訪問成員函式
c++中空指標也是可以呼叫成員函式的,但是也要注意有沒有用到this指標
為什麼空指標可以呼叫成員函式呢?個人理解:根據上文聯絡理解,成員變數和成員函式是分開的,只有非靜態成員變數是物件本身的
#include#includeusing namespace std;
class person
cout << this->m_age << endl;
} void print_hello()
public:
int m_age;
};void test01()
int main()
const修飾成員函式:
常函式:
1、成員函式後加const後我們稱為這個函式為常函式
2、常函式內不可以修改成員屬性
3、成員屬性宣告時加關鍵字mutable後,在常函式中依然可以修改
常物件:
1、宣告物件前加const稱該物件為常物件
2、常物件只能呼叫常函式
示例**:
#include#includeusing namespace std;
class person
void showp() const
public:
int a;
mutable int b; //mutable 修飾為可修改 可變的
};int main()
Objective C物件模型 類物件和元類物件
參考 objective c物件之類物件和元類物件 一 objective c物件模型及應用 參看以上文章基本可以了解objective c物件模型模型了,可做學習 1.動態替換類方法或例項方法 method swizzling api 2.編寫category類別 3.動態增加屬性 objc se...
C 類和物件(三) C 物件模型和this指標
c 中,類的成員變數和成員函式分開儲存。只有非靜態成員變數屬於類的物件,占用物件的記憶體空間。注1 非靜態成員函式和靜態成員 包括靜態成員變數與靜態成員函式 均不屬於類的物件,不占用物件的記憶體空間。注2 非靜態成員函式並非某個物件獨有,記憶體中僅存在乙份資料 乙份函式例項 不同物件的某個非靜態成員...
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...