c++有六個預設函式:分別是
1、default建構函式;
2、預設拷貝建構函式;
3、預設析構函式;
4、賦值運算子;
5、取值運算子;
6、取值運算子const;
// 這兩個類的效果相同下面這個例子展現的是預設函式的呼叫方式;class person
{}class person
// deafault建構函式;
person(const person&) // 預設拷貝建構函式
~person() // 析構函式
person& operator = (const person &) // 賦值運算子
person *operator &() // 取值運算子
const person *operator &() const // 取值運算子const
}
例:
person.h#ifndef person_h
#define person_h
#include #include using namespace std;
class person
string getcode()
void setname(string name);
void setcode(string code);
void printinfo();
private:
string sname;
string scode;
};#endif // person_h
person.cpp#include "person.h"
person::person()
person::person(const person &src)
person::~person()
person &person::operator =(const person &src)
person *person::operator &()
const person *person::operator &() const
void person::setname(string name)
void person::setcode(string code)
void person::printinfo()
main.cpp輸出結果:#include #include "person.h"
using namespace std;
int main()
只宣告乙個空類而不去使用時,編譯器會預設生成:
1、default建構函式; 2、預設拷貝建構函式; 3、預設析構函式; 4、賦值運算子;
建構函式:
建構函式用於建立物件,物件被建立時,編譯系統對物件分配記憶體空間,並自動呼叫建構函式。
建構函式執行的過程是:
1、系統建立記憶體空間,呼叫建構函式;
2、初始變數表;
3、函式體部分執行;
copy建構函式:
建構函式的一種,在c++中,下面三種物件需要拷貝的情況,拷貝建構函式將會被呼叫。
1、 乙個物件以值傳遞的方式傳入函式體
2、 乙個物件以值傳遞的方式從函式返回
3、 乙個物件需要通過另外乙個物件進行初始化
一般來說copy建構函式被重寫是為了處理預設拷貝建構函式(bitwise copy)不能完成的情況;這些情況大多來自深拷貝和淺拷貝的區別;
析構函式:
在物件析構時被掉用,用於析構物件,釋放記憶體;
賦值運算子:
賦值運算子存在的意義就是可以快速簡單的用乙個類對乙個類進行賦值;從賦值這一點上來說同copy建構函式十分相似;可以將copy建構函式看作是建構函式和賦值運算子的組合。
注意的是:必須返回 *this,也就是做運算元的引用;
如何禁用這些函式?
所有的預設函式都是public的並且是inline的;所以希望外界不能呼叫的話,就將這些函式申明成private型別,但是這回出現什麼後果呢?
我只能說呵呵了,試試吧。
C 預設的六個函式
一 建構函式 1.建構函式 cmystring 1 函式名與類名相同 無返回值 物件構造時系統自動呼叫相應的建構函式 建構函式可以過載 可以在類內或者類外定義 指定作用域即可 2 初始化列表比函式內初始化更高效 對於自定義型別,在初始化時系統會自動生成初始化列表,即系統會先走一遍初始化列表,然後在呼...
c 中的六個預設函式
1.c 三大特徵 封裝 繼承 多型 1.public 任意位置訪問 2.protected 本類,子類類中訪問 3.private 本類類中訪問 2.struct class 3.this thiscall 類中普通的成員方法中有預設的引數 this this student const 普通成員方...
C 中六個預設的函式
c 物件導向特點 繼承 封裝 多型 任務是初始化物件的記憶體空間。注意 新物件被建立,由編譯器自動呼叫建構函式,且在物件的生命週期之內只調動一次。不可以手動呼叫,類的成員方法依賴物件呼叫,即在建構函式完成後 建構函式的名字和類名相同,沒有返回值 建構函式可以過載,實參決定了呼叫哪個建構函式 沒有顯示...