類是編程人員表達自定義數(shù)據(jù)類型的C++機制。它和C語言中的結(jié)構(gòu)類似,C++類
成都創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站定制服務;為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及高端網(wǎng)站定制服務,成都企業(yè)網(wǎng)站定制及推廣,對VR全景等多個行業(yè)擁有多年的網(wǎng)站維護經(jīng)驗的網(wǎng)站建設公司。
支持數(shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O計,從某種意義上說,也就是數(shù)據(jù)類型的設
計和實現(xiàn)。
那么
String
類的原型如下
class
String
{
public:
String(const
char
*str=NULL);
//構(gòu)造函數(shù)
String(const
String
other);
//拷貝構(gòu)造函數(shù)
~String(void);
//析構(gòu)函數(shù)
String
operator=(const
String
other);
//等號操作符重載,賦值函數(shù)
ShowString();
private:
char
*m_data;
//字符指針
};
String::~String()
{
delete
[]
m_data;
//析構(gòu)函數(shù),釋放地址空間
}
String::String(const
char
*str)
{
if
(str==NULL)//當初始化串不存在的時候,為m_data申請一個空間存放'/0';
{
m_data=new
char[1];
*m_data='/0';
}
else//當初始化串存在的時候,為m_data申請同樣大小的空間存放該串;
{
int
length=strlen(str);
m_data=new
char[length+1];
strcpy(m_data,str);
}
}
String::String(const
String
other)//拷貝構(gòu)造函數(shù),功能與構(gòu)造函數(shù)類似。
{
int
length=strlen(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
}
String
String::operator
=(const
String
other)
//賦值函數(shù)
{
if
(this==other)//當?shù)刂废嗤瑫r,直接返回;
return
*this;
delete
[]
m_data;//當?shù)刂凡幌嗤瑫r,刪除原來申請的空間,重新開始構(gòu)造;
int
length=sizeof(other.m_data);
m_data=new
[length+1];
strcpy(m_data,other.m_data);
return
*this;
}
String::ShowString()//由于m_data是私有成員,對象只能通過public成員函數(shù)來訪問;
{
coutthis-m_dataendl;
}
測試一下:
main()
{
String
AD;
char
*
p="ABCDE";
String
B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}
或者通過參數(shù)傳進去,如
void Init(stu_handlertus *hdl)
{
hdl-count = 1;
for(i = 0; i 50; ++i)
{
hdl-rtus[i].rtuindex = 0
hdl-rtus[i].a = 0;
hdl-rtus[i].b = 0;
hdl-rtus[i].c = 0;
}
}
調(diào)用
Init( handlertus);
即可。
不過結(jié)構(gòu):
struct stu_handlertus
{
int count;
struct stu_handlertus rtus[50];
}handlertus;
是錯誤的,原因是這一句
struct stu_handlertus rtus[50];
這樣就不知道結(jié)構(gòu)stu_handlertus的大小了。所以上面改為
struct stu_handlertu rtus[50];
兩個結(jié)構(gòu)名字這么接近,是一個不好的風格。
類是編程人員表達自定義數(shù)據(jù)類型的C++機制。它和C語言中的結(jié)構(gòu)類似,C++類
支持數(shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O計,從某種意義上說,也就是數(shù)據(jù)類型的設
計和實現(xiàn)。
一、類的設計
1.類的聲明
class 類名
{
private: //私有
...
public: //公有
...
};
2.類的成員
一般在C++類中,所有定義的變量和函數(shù)都是類的成員。如果是變量,我們就叫
它數(shù)據(jù)成員如果是函數(shù),我們就叫它成員函數(shù)。
3.類成員的可見性
private和public訪問控制符決定了成員的可見性。由一個訪問控制符設定的可
訪問狀態(tài)將一直持續(xù)到下一個訪問控制符出現(xiàn),或者類聲明的結(jié)束。私有成員
僅能被同一個類中的成員函數(shù)訪問,公有成員既可以被同一類中的成員函數(shù)訪
問,也可以被其他已經(jīng)實例化的類中函數(shù)訪問。當然,這也有例外的情況,這
是以后要討論的友元函數(shù)。
類中默認的數(shù)據(jù)類型是private,結(jié)構(gòu)中的默認類型是public。一般情況下,變
量都作為私有成員出現(xiàn),函數(shù)都作為公有成員出現(xiàn)。
類中還有一種訪問控制符protected,叫保護成員,以后再說明。
4.初始化
在聲明一個類的對象時,可以用圓括號()包含一個初始化表。
看下面一個例子:
#include iostream.h
class Box
{
private:
int height,width,depth; //3個私有數(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); //聲明一個類對象并初始化
cout return 0;
}
當一個類中沒有private成員和protected成員時,也沒有虛函數(shù),并且不是從
其他類中派生出來的,可以用{}來初始化。(以后再講解)
5.內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是:內(nèi)聯(lián)函數(shù)是在編譯過程中展開的。通常內(nèi)聯(lián)函
數(shù)必須簡短。定義類的內(nèi)聯(lián)函數(shù)有兩種方法:一種和C語言一樣,在定義函數(shù)時
使用關鍵字inline。如:
inline int Box::volume()
{
return height*width*depth;
}
還有一種方法就是直接在類聲明的內(nèi)部定義函數(shù)體,而不是僅僅給出一個函數(shù)
原型。我們把上面的函數(shù)簡化一下:
#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); //聲明一個類對象并初始化
cout return 0;
}
這樣,兩個函數(shù)都默認為內(nèi)聯(lián)函數(shù)了。