嗯嗯沒(méi)錯(cuò)。。。在純C中結(jié)構(gòu)體中不可以定義成員函數(shù);結(jié)構(gòu)體中可以定義成員函數(shù)是C++的一個(gè)創(chuàng)新,在C++中的結(jié)構(gòu)體與類基本相同,
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)朗縣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
都可以定義成員變量和成員函數(shù),唯一的區(qū)別是在C++中結(jié)構(gòu)體的默認(rèn)訪問(wèn)控制符是public,而類的默認(rèn)訪問(wèn)控制符是private示例如下:
struct student
{
public: //默認(rèn)的訪問(wèn)控制符,可以省略
char name[20];
int NO;
int sum(int x, int y);
};這里邊的成員函數(shù)和成員變量可以直接被使用;
class student
{
private: //默認(rèn)的訪問(wèn)控制符,可以省略
char name[20];
int NO;
int sum(int x, int y);
public ://非默認(rèn)的訪問(wèn)控制符,如省略則不用被直接訪問(wèn)
void input(char * name);
};這里邊的成員函數(shù)和成員變量不能被直接使用,只能通過(guò)其共有的成員函數(shù)調(diào)用來(lái)使用它們;例如只能通過(guò)調(diào)用該類的input函數(shù)來(lái)為name[20]賦值(這里排除有構(gòu)造函數(shù)的情況哈);
類有基類和派生類,類成員包括私有成員、公有成員,受保護(hù)成員。私有一般是數(shù)據(jù)成員,公有成員一般為函數(shù)成員。函數(shù)成員可以有構(gòu)造函數(shù)、函數(shù)成員(或叫接口),也可以封裝(我的理解是內(nèi)連函數(shù)),友元函數(shù)(可以訪問(wèn)類私有數(shù)據(jù),但不是成員函數(shù))、析構(gòu)函數(shù)!
#include iostream.h
class ok
{
int a;
static int s;//聲明靜態(tài)數(shù)據(jù)成員
public:
ok(int a);
static void show();//聲明靜態(tài)成員函數(shù)
};
int ok::s=0;//定義并初始化靜態(tài)數(shù)據(jù)成員
ok::ok(int a)
{
this-a=a;
s+=a; //非靜態(tài)成員函數(shù)可以訪問(wèn)靜態(tài)數(shù)據(jù)成員
}
void ok::show() //靜態(tài)成員函數(shù)的實(shí)現(xiàn)
{
//coutaendl; //錯(cuò)誤代碼,a是非靜態(tài)數(shù)據(jù)成員
cout"s="sendl;
}
void main()
{
ok cat(2);
cat.show();
ok dog(3);
dog.show();
ok::show();
}
/*------------------------------------------------------------
○靜態(tài)成員之間可以相互訪問(wèn),如靜態(tài)成員函數(shù)訪問(wèn)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù);
○靜態(tài)成員函數(shù)沒(méi)有this指針。無(wú)法訪問(wèn)屬于類對(duì)象的非靜態(tài)數(shù)據(jù)成員和非靜態(tài)成員函數(shù),
○非靜態(tài)成員函數(shù)可以訪問(wèn)靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員;
○靜態(tài)成員函數(shù)不能訪問(wèn)非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員;
○由于沒(méi)有this指針的額外開(kāi)銷,因此靜態(tài)成員函數(shù)與類的非靜態(tài)函數(shù)相比速度上會(huì)有少許的增長(zhǎng);
○非靜態(tài)成員函數(shù)總是具體的屬于某個(gè)類的具體對(duì)象,this是缺省的;
-------------------------------------------------------------*/
這個(gè),真的不可以,C本來(lái)就是面向過(guò)程的語(yǔ)言,還不涉及到面向?qū)ο蟮乃枷耄m然用C也可以實(shí)現(xiàn)面向?qū)ο蟮木幊蹋?/p>
不對(duì)。成員函數(shù)可以屬于類,而不屬于被實(shí)例化的對(duì)象,另外,語(yǔ)言規(guī)范允許虛函數(shù)這樣的成員函數(shù)存在。
區(qū)別很大:
1.成員函數(shù)是面向?qū)ο蟮母拍?,所謂的成員函數(shù),是指一個(gè)函數(shù)作為類的成員,公有成員、私有成員或者保護(hù)成員。
2.普通函數(shù)一般有兩種傳遞方式,按類型傳遞和按值傳遞,也就是傳指針和傳返回值兩種情況。成員函數(shù)一般是按類型傳遞,也即是傳指針地址
3.普通函數(shù)可以隨便調(diào)用,并且無(wú)法繼承和封裝,成員函數(shù)根據(jù)類的不同,可以進(jìn)行繼承,根據(jù)公有私有的不同,調(diào)用方式也不同
4.深層次的區(qū)別,普通函數(shù)作為C語(yǔ)言的概念,用的是stdlib,成員函數(shù)是用iostream,編譯方法不同,至于誰(shuí)占內(nèi)存多,并不好說(shuō),也不是說(shuō)面向?qū)ο蟮木驼純?nèi)存大些,還是看具體的環(huán)境和編譯器。
5.嵌入式的編程,用普通函數(shù)較多,成員函數(shù)較少,當(dāng)然ARM嵌入linux那種例外
大體上能一下子想到的只有這么多了
函數(shù)是否分配內(nèi)存,看變量,這個(gè)問(wèn)題,我得詳細(xì)解釋一下,你是否熟悉匯編?知道不知道函數(shù)字段這個(gè)概念,也就說(shuō),所有函數(shù)都是分配在一段共享字段里面的,也就是你所說(shuō)的內(nèi)存,其實(shí)不僅僅是內(nèi)存,包括閃存等等都可以包含,所以是占用了一段空間的,只是這段空間不一定在內(nèi)存內(nèi),可能在閃存內(nèi),也可能在硬盤內(nèi),這么說(shuō),你清楚嗎?
分享文章:c語(yǔ)言有成員函數(shù)嗎 C語(yǔ)言成員函數(shù)
本文路徑:http://chinadenli.net/article26/dodiocg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站營(yíng)銷、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)