真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言析構(gòu)函數(shù)怎么寫 c語言實(shí)現(xiàn)析構(gòu)

c語言中怎樣使用析構(gòu)函數(shù) 不是c++里面的內(nèi)容僅僅是C語言中怎樣使用析構(gòu)函數(shù)

C語言是面向過程的編程語言,構(gòu)造函數(shù)和析構(gòu)函數(shù)是用在面向?qū)ο蟮木幊陶Z言里的。所以C里面是沒有析構(gòu)函數(shù)的!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了懷安免費(fèi)建站歡迎大家使用!

C語言 類的構(gòu)造函數(shù)和析構(gòu)函數(shù)(考試在線等!急?。。。?/h2>

類是編程人員表達(dá)自定義數(shù)據(jù)類型的C++機(jī)制。它和C語言中的結(jié)構(gòu)類似,C++類

支持?jǐn)?shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O(shè)計(jì),從某種意義上說,也就是數(shù)據(jù)類型的設(shè)

計(jì)和實(shí)現(xiàn)。

一、類的設(shè)計(jì)

1.類的聲明

class 類名

{

private: //私有

...

public: //公有

...

};

2.類的成員

一般在C++類中,所有定義的變量和函數(shù)都是類的成員。如果是變量,我們就叫

它數(shù)據(jù)成員如果是函數(shù),我們就叫它成員函數(shù)。

3.類成員的可見性

private和public訪問控制符決定了成員的可見性。由一個(gè)訪問控制符設(shè)定的可

訪問狀態(tài)將一直持續(xù)到下一個(gè)訪問控制符出現(xiàn),或者類聲明的結(jié)束。私有成員

僅能被同一個(gè)類中的成員函數(shù)訪問,公有成員既可以被同一類中的成員函數(shù)訪

問,也可以被其他已經(jīng)實(shí)例化的類中函數(shù)訪問。當(dāng)然,這也有例外的情況,這

是以后要討論的友元函數(shù)。

類中默認(rèn)的數(shù)據(jù)類型是private,結(jié)構(gòu)中的默認(rèn)類型是public。一般情況下,變

量都作為私有成員出現(xiàn),函數(shù)都作為公有成員出現(xiàn)。

類中還有一種訪問控制符protected,叫保護(hù)成員,以后再說明。

4.初始化

在聲明一個(gè)類的對(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è)類對(duì)象并初始化

cout return 0;

}

當(dāng)一個(gè)類中沒有private成員和protected成員時(shí),也沒有虛函數(shù),并且不是從

其他類中派生出來的,可以用{}來初始化。(以后再講解)

5.內(nèi)聯(lián)函數(shù)

內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是:內(nèi)聯(lián)函數(shù)是在編譯過程中展開的。通常內(nèi)聯(lián)函

數(shù)必須簡(jiǎn)短。定義類的內(nèi)聯(lián)函數(shù)有兩種方法:一種和C語言一樣,在定義函數(shù)時(shí)

使用關(guān)鍵字inline。如:

inline int Box::volume()

{

return height*width*depth;

}

還有一種方法就是直接在類聲明的內(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è)類對(duì)象并初始化

cout return 0;

}

這樣,兩個(gè)函數(shù)都默認(rèn)為內(nèi)聯(lián)函數(shù)了。

C語言析構(gòu)函數(shù)問題

構(gòu)造函數(shù)錯(cuò)了,不是析構(gòu)函數(shù)錯(cuò)了,看下面:

#include?iostream???//?包含頭文件iostream

using?namespace?std;??//?使用命名空間std

class?Course

{

public:

Course(int?pId,?char*?pName,?int?pHours,?char*?pTeacherInCharge);

void?printCourse();

~Course();

private:

int??id;

char?*name;

int??hours;

char?*teacherInCharge;

};

Course::Course(int?pId,?char*?pName,?int?pHours,?char*?pTeacherInCharge)

{

id=pId;

hours=pHours;

name=?new?char[strlen(pName)+1];?

if?(name?!=NULL)?strcpy(name,pName);//name=pName;

teacherInCharge=?new?char[strlen(pTeacherInCharge)+1];?

if(teacherInCharge!=NULL)?strcpy(teacherInCharge,pTeacherInCharge);//teacherInCharge=pTeacherInCharge;

}

void?Course::printCourse()

{

cout"ID??""NAME??""HOURS???""TEACHINCHARGE???"endl;

coutidname?hoursteacherInChargeendl;

}

Course::~Course()

{

cout"destructing……"endl;

delete[]?name;

delete[]?teacherInCharge;

}

int?main?()

{

Course?c[3]={Course(0001,"lili",36,"zhangsan"),Course(0002,"sary",36,"wanger"),Course(0003,"mary",36,"zhaoqian")};

for?(int?i=0;i3;i++)

c[i].printCourse();

return?0;

}

如何用c語言實(shí)現(xiàn)CString的構(gòu)造函數(shù),析構(gòu)函數(shù)和賦值函數(shù)

類是編程人員表達(dá)自定義數(shù)據(jù)類型的C++機(jī)制。它和C語言中的結(jié)構(gòu)類似,C++類

支持?jǐn)?shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O(shè)計(jì),從某種意義上說,也就是數(shù)據(jù)類型的設(shè)

計(jì)和實(shí)現(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);

//等號(hào)操作符重載,賦值函數(shù)

ShowString();

private:

char

*m_data;

//字符指針

};

String::~String()

{

delete

[]

m_data;

//析構(gòu)函數(shù),釋放地址空間

}

String::String(const

char

*str)

{

if

(str==NULL)//當(dāng)初始化串不存在的時(shí)候,為m_data申請(qǐng)一個(gè)空間存放'/0';

{

m_data=new

char[1];

*m_data='/0';

}

else//當(dāng)初始化串存在的時(shí)候,為m_data申請(qǐng)同樣大小的空間存放該串;

{

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)//當(dāng)?shù)刂废嗤瑫r(shí),直接返回;

return

*this;

delete

[]

m_data;//當(dāng)?shù)刂凡幌嗤瑫r(shí),刪除原來申請(qǐng)的空間,重新開始構(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是私有成員,對(duì)象只能通過public成員函數(shù)來訪問;

{

coutthis-m_dataendl;

}

測(cè)試一下:

main()

{

String

AD;

char

*

p="ABCDE";

String

B(p);

AD.ShowString();

AD=B;

AD.ShowString();

}


標(biāo)題名稱:c語言析構(gòu)函數(shù)怎么寫 c語言實(shí)現(xiàn)析構(gòu)
新聞來源:http://weahome.cn/article/doiiehd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部