類的課程學習到此就告一段落,總的說來類還是挺容易上手的,就是有很多的理論,這些理論簡而言之就是一些編寫**的規則,理解清楚後一切都不是問題。
下面我就著重說一下關於class的學習總結
一、 定義
class與struct大體上的使用方法相同,只是class中的資料預設為private(私有),而struct預設為public(公有)。其目的是為了保護資料。例如:
class x
二、 this指標
這玩意咋說呢我是感覺用處不大,但是有些地方不用它還真不好弄,我就稍微拉拉它的一些用處吧。
1. 區分與區域性變數重名的資料成員。
2. 返回當前型別。(我很多時候使用這個功能)
3. 獲取當前物件的位址。
使用方法**如下:
class x
x& add(const x& a)
void copy(const x& a)
};
知識點:加入我們定義乙個class x,則x類的this指標的型別是x*。this指標是個常量,含有當前實施呼叫的物件的位址。不能改變this指標的值,也不能取this指標的位址。
三、 訪問器(getxx)和修改器(setxx)
定義:被用來修改private資料成員的public型別的成員函式被稱為修改器,訪問器同理。
例如以下**:
class x
void setxx(double c)
};
這兩個的函式雖然簡單但不可或缺,可以更好地保護資料,體現其封裝性。同時在修改器中還可以用if判斷語句進行新資料的檢驗,確保有效性。
四、 友元函式
這個東西就好說了,就是在成員函式前加乙個friend。定義的友元函式可以訪問並修改私有的資料成員,不過老師說盡量少用,用會破壞類的封裝性。我感覺也是,本意是隱藏資料再給它弄成「公有」,還有啥個勁。但是有時候調程式總是因為私有成員而出錯的話,不妨弄乙個友元函式,頓時神清氣爽。我一般會把自定義排序函式(cmp)定義成友元函式,不然的話對大量私有資料進行排序會成為乙個不小的問題。
乙個下面有個友元函式的簡單使用希望有助於大家的理解:
class x
friend x add(const x&,const x&);//因為add函式呼叫了私有資料,不設定為友元函式無法訪問。
};//建構函式進行初始化,後面會講到。
x add(const x& a,const x& b)
五、 建構函式與析構函式
這兩個東西是必不可少的,建構函式進行賦初值,而析構函式則負責在銷毀物件後對物件的相關資源進行清理。
先說建構函式
建構函式最起碼有兩個,乙個有引數的與乙個無引數的。(過載函式)
建構函式的名字與類的名字相同,沒有返回型別。
建構函式的初始化列表(盡量使用這個,效率更高)
注意:建構函式的初始化列表位於建構函式的參數列之後,函式體之前。
成員初始化順序與它們在類中定義的順序相同。
盡量避免用某些成員初始化其他成員。
例如:
class x
x(int v):m(v),r(v){}
};
六、 委託建構函式
當乙個類中定義多個建構函式時,其中乙個建構函式可以呼叫另乙個建構函式來完成自己的任務,這就是委託建構函式。不好闡述用**說話吧。
#includeusing namespace std;
class x
x(int aa,int bb):x(aa,bb,0)//(2);呼叫(1)初始化
//x(int aa):x(aa,0,0)//(3);呼叫(1)初始化
x():x(1.1)//(4);呼叫(2)初始化,(2)又呼叫(1)初始化
private:
int a,b,c;
};int main()
注意:顯式呼叫的話析構函式會被執行兩次。
使用**如下:
class x;
x::~x()
八、const成員
const可以限定類中的資料成員,將其設定為常量。const資料成員在建構函式的初始化列表中初始化,一旦初始化後在物件的整個生存期都不可改變。
定義方法為:在資料成員前加const即可。
1.若需要用函式檢視const資料成員,那麼函式前也需要加const。
2.乙個類的物件也可以用const限定,被限定的物件只可以進行訪問,但是不可以進行修改。訪問函式需要加上const。**如下:
int get() const
注意:只有const成員函式才可以被const物件呼叫,const物件不能呼叫非const成員函式,但是非const物件可以呼叫const成員函式。
例如以下**:
class x
x():m(0){}
void set(int v)
int get() const
};……
const x b(5);
b.get();正確
b.set(10);//錯誤const物件的資料無法修改
九、static成員(靜態)
定義:屬於整個類,但不屬於某個物件,乙個類的所有物件都可以訪問這個資料。例如在qq上建立乙個群,可以定義乙個static型別的資料成員,對群裡面的人員計數。
具有以下優勢:
靜態資料成員沒有進入程式的全域性作用域,只是在類作用域中,因而不會與全域性域中的名字產生衝突。
可以實現資料隱藏,靜態成員可以是private成員。
使用**如下:
class object
~object()
int getcount() const
};int object::count=0;
初始化問題:
靜態資料應該在類定義之外初始化,定義時要使用類名字限定靜態成員名,**如下:
int object::count=0;
注意:static成員只能定義一次,一般放在包含成員函式定義的原始檔中。
類中的常量——static const成員
例如:銀行允許建立聯名賬戶,但是最對兩個人,**如下:
class object;
const int object::maxren=2;
static const資料成員的定義和static一樣在類外,但是類外定義時要加const。雖然c++允許整型資料可以在類內定義,但是為了一致性,都在類外定義。
靜態資料的訪問
在類的靜態函式中可以直接訪問靜態資料成員。但是在非成員函式中,可以通過一下兩種方式訪問靜態資料成員。
成員訪問運算子「.」和「->」,通過物件和指標訪問。
用類名字限定的靜態成員名字訪問。
**如下:
class object;
void func(object& obj)
{cout用普通成員函式訪問靜態資料成員。
用靜態成員函式來訪問靜態資料成員。
呼叫方式:
object obj;
obj.getcount();
object::getcount();
關於class 類大小的總結
namespace test class size class b class c public a,public b class d virtual public a class e virtual public a,virtual public b class f void test names...
DIV CSS學習 關於ID和CLASS
div css學習 關於id和class 中國網管論壇 在這裡我們有到id和class,那麼有的朋友就要問了,究竟什麼情況下用id,什麼情況下用class呢?id,表示的是唯一性,並且在這個頁面中只會出現一次,我們用它來表示布局的結構 class,表示一組 類 或乙個具有同樣性質的元素,它們可以共用...
關於struct和class的知識
在c 中,struct可以同class一樣擁有自己的成員,只不過struct成員的預設訪問的是public範圍。如果在struct中定義了建構函式,則預設建構函式 無參建構函式 必須顯式定義才能使用 隱式構造方法是編譯器自動給出的,顯式構造方法是程式設計師自己定義的 否則,在建立此結構體的例項的時候...