類(lèi)是編程人員表達(dá)自定義數(shù)據(jù)類(lèi)型的C++機(jī)制。它和C語(yǔ)言中的結(jié)構(gòu)類(lèi)似,C++類(lèi)
創(chuàng)新互聯(lián)建站成立與2013年,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鶴城做網(wǎng)站,已為上家服務(wù),為鶴城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
支持?jǐn)?shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O(shè)計(jì),從某種意義上說(shuō),也就是數(shù)據(jù)類(lèi)型的設(shè)
計(jì)和實(shí)現(xiàn)。
一、類(lèi)的設(shè)計(jì)
1.類(lèi)的聲明
class 類(lèi)名
{
private: //私有
...
public: //公有
...
};
2.類(lèi)的成員
一般在C++類(lèi)中,所有定義的變量和函數(shù)都是類(lèi)的成員。如果是變量,我們就叫
它數(shù)據(jù)成員如果是函數(shù),我們就叫它成員函數(shù)。
3.類(lèi)成員的可見(jiàn)性
private和public訪問(wèn)控制符決定了成員的可見(jiàn)性。由一個(gè)訪問(wèn)控制符設(shè)定的可
訪問(wèn)狀態(tài)將一直持續(xù)到下一個(gè)訪問(wèn)控制符出現(xiàn),或者類(lèi)聲明的結(jié)束。私有成員
僅能被同一個(gè)類(lèi)中的成員函數(shù)訪問(wèn),公有成員既可以被同一類(lèi)中的成員函數(shù)訪
問(wèn),也可以被其他已經(jīng)實(shí)例化的類(lèi)中函數(shù)訪問(wèn)。當(dāng)然,這也有例外的情況,這
是以后要討論的友元函數(shù)。
類(lèi)中默認(rèn)的數(shù)據(jù)類(lèi)型是private,結(jié)構(gòu)中的默認(rèn)類(lèi)型是public。一般情況下,變
量都作為私有成員出現(xiàn),函數(shù)都作為公有成員出現(xiàn)。
類(lèi)中還有一種訪問(wèn)控制符protected,叫保護(hù)成員,以后再說(shuō)明。
4.初始化
在聲明一個(gè)類(lèi)的對(duì)象時(shí),可以用圓括號(hào)()包含一個(gè)初始化表。
看下面一個(gè)例子:
#include iostream.h
class Box
{
private:
int height,width,depth; //3個(gè)私有數(shù)據(jù)成員
public:
Box(int,int,int);
~Box();
int volume(); //成員函數(shù)
};
Box::Box(int ht,int wd,int dp)
{
height=ht;
width=wd;
depth=dp;
}
Box::~Box()
{
//nothing
}
int Box::volume()
{
return height*width*depth;
}
int main()
{
Box thisbox(3,4,5); //聲明一個(gè)類(lèi)對(duì)象并初始化
cout return 0;
}
當(dāng)一個(gè)類(lèi)中沒(méi)有private成員和protected成員時(shí),也沒(méi)有虛函數(shù),并且不是從
其他類(lèi)中派生出來(lái)的,可以用{}來(lái)初始化。(以后再講解)
5.內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是:內(nèi)聯(lián)函數(shù)是在編譯過(guò)程中展開(kāi)的。通常內(nèi)聯(lián)函
數(shù)必須簡(jiǎn)短。定義類(lèi)的內(nèi)聯(lián)函數(shù)有兩種方法:一種和C語(yǔ)言一樣,在定義函數(shù)時(shí)
使用關(guān)鍵字inline。如:
inline int Box::volume()
{
return height*width*depth;
}
還有一種方法就是直接在類(lèi)聲明的內(nèi)部定義函數(shù)體,而不是僅僅給出一個(gè)函數(shù)
原型。我們把上面的函數(shù)簡(jiǎn)化一下:
#include iostream.h
class Box
{
private:
int height,width,depth;
public:
Box(int ht,int wd,int dp)
{
height=ht;
width=wd;
depth=dp;
}
~Box();
int volume()
{
return height*width*depth;
}
};
int main()
{
Box thisbox(3,4,5); //聲明一個(gè)類(lèi)對(duì)象并初始化
cout return 0;
}
這樣,兩個(gè)函數(shù)都默認(rèn)為內(nèi)聯(lián)函數(shù)了。
類(lèi)有基類(lèi)和派生類(lèi),類(lèi)成員包括私有成員、公有成員,受保護(hù)成員。私有一般是數(shù)據(jù)成員,公有成員一般為函數(shù)成員。函數(shù)成員可以有構(gòu)造函數(shù)、函數(shù)成員(或叫接口),也可以封裝(我的理解是內(nèi)連函數(shù)),友元函數(shù)(可以訪問(wèn)類(lèi)私有數(shù)據(jù),但不是成員函數(shù))、析構(gòu)函數(shù)!
static在c語(yǔ)言中是私有、靜態(tài)意思。
用于在函數(shù)中聲明“靜態(tài)變量”用,在每一次調(diào)用后,該變量并不在函數(shù)返回時(shí)立即釋放,變量中保存的值,可以保留到下一次調(diào)用時(shí)繼續(xù)有效。
私有就是隱藏。static函數(shù)只能聲明后的本文中調(diào)用。static全局變量只能聲明后的本文中調(diào)用。static局部變量只能聲明后的本函數(shù)調(diào)用
靜態(tài)就是一直存在,相對(duì)于每次調(diào)用動(dòng)態(tài)分配而言。static函數(shù)未驗(yàn)證是否每次調(diào)用代碼地址都是一致的。static全局變量生命周期到程序或進(jìn)程結(jié)束。static局部變量生命周期到程序或進(jìn)程結(jié)束。
static的使用和作用
靜態(tài)全局變量。全局變量前加static,修飾全局變量為靜態(tài)全局變量,改變?nèi)肿兞康目梢?jiàn)性。靜態(tài)局部變量。局部變量前加static,修飾局部變量為靜態(tài)局部變量,改變局部變量的銷(xiāo)毀時(shí)期。靜態(tài)函數(shù)。函數(shù)返回類(lèi)型前加static,修飾函數(shù)為靜態(tài)函數(shù),改變函數(shù)的可見(jiàn)性。
類(lèi)的靜態(tài)成員。類(lèi)成員前加static,修飾類(lèi)的成員為類(lèi)的靜態(tài)成員,實(shí)現(xiàn)多個(gè)對(duì)象之間的數(shù)據(jù)共享,并且使用靜態(tài)成員不會(huì)破壞封裝性,也保證了安全性。類(lèi)的靜態(tài)函數(shù),類(lèi)函數(shù)前加static,修飾類(lèi)的函數(shù)為靜態(tài)函數(shù),減少資源消耗,不需要實(shí)例化就可以使用。
可以。
私有函數(shù)只有該類(lèi)的成員變量或成員函數(shù)可以訪問(wèn)。在C語(yǔ)言中,也有“private函數(shù)”,它就是接下來(lái)要說(shuō)的static函數(shù),完成面向?qū)ο缶幊讨衟rivate函數(shù)的功能。
當(dāng)你的程序中有很多個(gè)源文件的時(shí)候,你肯定會(huì)讓某個(gè)源文件只提供一些外界需要的接口,其他的函數(shù)可能是為了實(shí)現(xiàn)這些接口而編寫(xiě),這些其他的函數(shù)你可能并不希望被外界(非本源文件)所看到,這時(shí)候就可以用static修飾這些“其他的函數(shù)”。
所以static函數(shù)的作用域是本源文件,把它想象為面向?qū)ο笾械膒rivate函數(shù)就可以了。
在函數(shù)聲明中加上static的好處是:
在多個(gè)文件鏈接時(shí),static函數(shù)只是文件域內(nèi)可見(jiàn)。