#define _crt_secure_no_warnings 1;
#includeusing namespace std;
#include#if 0
//建構函式是乙個特殊的成員函式,名字與類名相同,
//建立類型別物件時由編譯器自動呼叫,保證每個資料成員 都有 乙個合適的初始值,
//並且在物件的生命週期內只呼叫一次
class date
//2.帶參建構函式
date(int year, int mouth, int day)
private:
int _year;
int _mouth;
int _day;
};int main()
#endif
#if 0
//預設建構函式
//無參的建構函式和全預設的建構函式都稱為預設建構函式,並且預設建構函式只能有乙個。
//注意:無參 建構函式、全預設建構函式、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式
class date
date(int year = 1900, int mouth = 1, int day = 1)
private:
int _year;
int _mouth;
int _day;
};int main()
#endif
//編譯器生成預設的建構函式會對自定型別成員_t呼叫的它的預設成員函式
#if 0
class time
private:
int _hour;
int _minute;
int _second;
};class date
;int main()
#endif
//析構函式
//析構函式是特殊的成員函式。
//其特徵如下:
//1. 析構函式名是在類名前加上字元 ~。
//2. 無引數無返回值, 析構函式不能過載。
//3. 乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式。
//4. 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。
//5. 注意析構函式體內並不是刪除物件,而是做一些清理工作。
#if 0
#includetypedef int datatype;
class seqlist
~seqlist() }
private:
int* _pdata;
size_t _size;
size_t _capacity;
};void test()
int main()
#endif
#if 0
class a
void display()
void seta(int a)
public:
int _a = 10;
const int _b = 100;
};int main()
#endif
//拷貝建構函式
//1. 拷貝建構函式是建構函式的乙個過載形式。
//2. 拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。
//(傳參的時候會拷貝乙個臨時變數,這個臨時變數會呼叫拷貝建構函式,這樣就會無限遞迴)
#if 0
class date
date(const date& d)
private:
int _year;
int _mouth;
int _day;
};int main()
#endif
#if 0
//拷貝建構函式若未顯示定義,系統會生成預設的拷貝建構函式
class date
private:
int _year;
int _mouth;
int _day;
};int main()
#endif
#if 0
//需要深拷貝
class string
~string()
private:
char* _str;
};int main()
#endif
#if 0
//賦值運算子過載 operator
//c++為了增強**的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,
//也具有其返回值型別,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似。
//1.不能通過連線其他符號來建立新的操作符:比如operator@
//2.過載操作符必須有乙個類型別或者列舉型別的運算元
//3.用於內建型別的操作符,其含義不能改變,例如:內建的整型 + ,不 能改變其含義
//4.作為類成員的過載函式時,其形參看起來比運算元數目少1成員函式的
//操作符有乙個預設的形參this,限定為第乙個形參
//5. .* (類成員指標訪問運算子)、
//:: (域運算子)
//sizeof(長度運算子)
//?: (三目操作符/條件操作運演算法)
//. (成員訪問操作符)
//注意以上5個運算子不能過載。這個經常在筆試選擇題**現。
class date
//bool operator==(const date& d1, const date& d2)
//{} 此運算子函式的引數太多
//bool operator==(date* this, const date& d)
//左運算元是this指向的呼叫函式的物件
bool operator==(const date& d)
private:
int _year;
int _mouth;
int _day;
};int main()
#endif
#if 0
//賦值運算子過載
class date
date(const date& d)
//void operator=(const date& d)
// //}
date& operator=(const date& d)
return *this;
}private:
int _year;
int _mouth;
int _day;
};int main()
#endif
//賦值運算子主要有五點:
//1. 引數型別
//2. 返回值
//3. 檢測是否自己給自己賦值
//4. 返回* this
//5. 乙個類如果沒有顯式定義賦值運算子過載,編譯器也會生成乙個,
// 完成物件按位元組序的值拷貝。(淺拷貝)
#if 0
class string
~string()
//string& operator=(const string& s)
// // return *this;
//}private:
char* _str;
};int main()
#endif
#if 0
//const 修飾的成員函式:
//將const修飾的類成員函式稱之為const成員函式,
//const修飾類成員函式,實際修飾該成員函式隱含的this 指標,
//表明在該成員函式中不能對類的任何成員進行修改。
class date
//void display(const date* this) //編譯器對const 成員函式的處理
void display()const //const 修飾的成員函式
void display()
//void setdate()
// void setdate()const
private:
int _year;
int _mouth;
int _day;
};int main()
//const 物件不可以呼叫非const 成員函式
//const 成員函式不能呼叫其他的非const 成員函式
//非const物件可以呼叫const成員函式
//非const 成員函式可以呼叫其他的const成員函式
//const 物件可以呼叫其他的const成員函式
//const 成員函式可以呼叫其他的const 成員函式
#endif
# if 0
//取位址及const 去位址操作符過載
//這兩個預設成員函式一般不用重新定義 ,編譯器缺省會生成
//如果想讓別人獲取到指定的內容則需要過載
class date
const date* operator&()const
private:
int _year;
int _mouth;
int _day;
};#endif
C 類和物件(中)
一 類的六個預設成員函式 1 初始化和清理。建構函式完成初始化,析構函式完成清理 2 拷貝複製 拷貝建構函式使用同類物件建立物件,賦值過載是把乙個物件賦值給另乙個物件 3 取位址和過載 主要是對普通物件和const物件取位址 二,建構函式 1 建構函式是乙個特殊成員函式,名字和類名相同,建立類型別物...
C 類和物件(中)
目錄 1.建構函式 2.析構函式 3.拷貝建構函式 4.賦值運算子的過載 5.const成員 6.取位址及const取位址操作符過載 乙個類中,如果沒有任何成員,稱為空類。任何乙個類中,都會包含6個預設的成員函式,即使是空類也會自動生成6個預設成員函式,如下為類中的6個預設成員函式 注意 預設成員函...
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...