亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++詳細講解函數(shù)調用與Struct和CLass的區(qū)別

 更新時間:2022年05月10日 09:18:13   作者:丶布布  
主調函數(shù)使用被調函數(shù)的功能,稱為函數(shù)調用。在C語言/C++中,只有在函數(shù)調用時,函數(shù)體中定義的功能才會被執(zhí)行,下面讓我們詳細來了解

一、結構回顧

結構:自定義的數(shù)據類型,不管C++/C結構都用Struct定義,與C中的結構相比,C++中的結構不僅僅有成員變量,還可以在其中定義成員函數(shù)(或方法)。

代碼:

struct Student
{
	int number;      //成員變量
	char name[100];  //成員變量
	void num()       //成員函數(shù)(方法)
	{
		number++;
	}
};

三種調用函數(shù)方式對結構成員變量值的影響 :

1、傳值調用

《結構變量》作為函數(shù)形參的一種調用方式

//值傳遞
void func(Student temp)//《結構變量》作為函數(shù)形參的一種調用方式(值傳遞)
{
	temp.number = 2000;
	strcpy_s(temp.name, sizeof(temp.name), "lisi");
	//這里通過添加監(jiān)視,看到形參結構變量temp的內存地址已經變?yōu)榱?x00d7fbe4
	return;
}
int main()
{
	Student student;
	student.number = 1001;
	strcpy_s(student.name, sizeof(student.name), "zhangsan");
	func(student);                 //通過添加監(jiān)視,看到實參結構變量student的內存地址是0x00d7fd20
	cout << student.number << endl;//這里發(fā)現(xiàn) 結構Student成員變量number值并沒有因為調用函數(shù)而變成2000
	cout << student.name << endl;  //這里發(fā)現(xiàn) 結構Student成員變量name值并沒有因為調用函數(shù)變成“l(fā)isi”
}

可以看到,調用函數(shù)func之前,實參結構變量student的內存地址是0x00d7fd20

調用函數(shù)func,進入函數(shù)內部,發(fā)現(xiàn)形參結構變量temp的內存地址已經變?yōu)榱?x00d7fbe4

交互失敗的原因:傳值調用,形參temp僅僅是對實參student進行了值拷貝,兩者的內存地址是不同的,所以函數(shù)里對形參的改變不會影響到函數(shù)外的變量的值。

PS:上面這種傳值調用方法(值傳遞)效率比較低,因為實參傳遞給形參時,發(fā)生了內存內容的拷貝(實參內容拷貝給了形參),尤其是當結構或類對象做形參,外界實參需要拷貝較多的值給函數(shù)形參的的時候會體現(xiàn)的更明顯。

2、引用調用

《引用&》作為函數(shù)形參的一種調用方式,就是把結構變量的引用傳入函數(shù)中,相當于將變量的地址傳進了函數(shù)內部,對形參的內存地址(內容)進行更改就相當于對函數(shù)外部實參的內存地址(內容)進行修改了。

//引用傳遞
void func1(Student &temp1)
{
	temp1.number = 2000;
	strcpy_s(temp1.name, sizeof(temp1.name), "lisi");
	//這里通過添加監(jiān)視,看到形參結構變量temp1的內存地址仍然是0x00d7fd20
	return;
}
int main()
{
	Student student;
	student.number = 1001;
	strcpy_s(student.name, sizeof(student.name), "zhangsan");
	func1(student);                //通過添加監(jiān)視,看到實參結構變量student的內存地址是0x00d7fd20
	cout << student.number << endl;//這里發(fā)現(xiàn) 結構Student成員變量number值因為調用函數(shù)func1而變成2000
	cout << student.name << endl;  //這里發(fā)現(xiàn) 結構Student成員變量name值因為調用函數(shù)func1變成“l(fā)isi”
}

可以看到,調用函數(shù)func1之前,實參結構變量student的內存地址是0x00d7fd20

調用函數(shù)func1,進入函數(shù)內部,發(fā)現(xiàn)形參結構變量temp1的內存地址仍然是0x00d7fd20

交互成功的原因:形參temp1直接引用實參student的地址,對這個地址上的變量進行操作,相當于直接操作實參student上的變量,省略了數(shù)值拷貝的過程,效率很高。

3、指針調用

《用指向結構體的指針*》作為函數(shù)形參的一種調用方式,通過對結構變量取地址作為實參賦給函數(shù)的形參指針。

//指針傳遞
void func2(Student *temp2)//《用指向結構體的指針》作為函數(shù)參數(shù)
{
	temp2->number = 2000;
	strcpy_s(temp2->name, sizeof(temp2->name), "lisi");
	//這里通過添加監(jiān)視,看到形參結構變量temp1的內存地址仍然是0x003af858 
	return;
}
int main()
{
	Student student;
	student.number = 1001;
	strcpy_s(student.name, sizeof(student.name), "zhangsan");
	func2(&student);               //通過添加監(jiān)視,看到實參結構變量student的內存地址是0x003af858 
	cout << student.number << endl;//這里發(fā)現(xiàn) 結構Student成員變量number值因為調用函數(shù)func1而變成2000
	cout << student.name << endl;  //這里發(fā)現(xiàn) 結構Student成員變量name值因為調用函數(shù)func1變成“l(fā)isi”
}

可以看到,調用函數(shù)func2之前,實參結構變量student的內存地址是0x003af858

調用函數(shù)func2,進入函數(shù)內部,發(fā)現(xiàn)形參結構變量temp2的內存地址仍然是0x003af858

交互成功的原因:和上面引用引用傳遞類似,同樣是將地址傳進去了,直接對地址進行操作,在函數(shù)func2中直接修改了地址中的內容,函數(shù)外部對象的值同樣被修改了,效率也很高。

小結:

引用調用和指針調用的效率明顯高于傳值調用,在C++中,更習慣用引用類型的形參來取代指針類型的形參。

二、public和private權限修飾符

權限修飾符:public、private、protected,本文只談前兩個公有public和私有private。保護protected后面討論。

  • public:公有的意思、用這個修飾符修飾成員函數(shù)和成員變量,那么其可以被外界訪問,一般我們需要能被外界訪問的東西就定義為public,就好像該類的外部接口一樣。
  • private:私有的意思,用這個修飾符 修飾類中的成員函數(shù)和成員變量的時候,只有被內部定義的成員函數(shù)才能使用。
struct Teacher
{
public: 
	int number;
	char name[100];
	void num()
	{
		number++;
		age = 30;   //內部成員函數(shù)中可以訪問私有成員變量
	}
private:
	int age;
};
int main2()
{
	Teacher teacher;
	teacher.number = 1001;     //因為number是公有成員變量,所以外界可以直接訪問
	//teacher.age;             //不可調用訪問
}

三、類簡介

類:與結構一樣也是用戶自定義的數(shù)據類型,類和結構的主要區(qū)別如下:

  • 類這個概念只存在于C++中,C中是沒有類這個概念的。
  • 結構用Struct定義,類用Class定義。

在C中,定義一個屬于該結構的變量,叫結構變量;而在C++中,定義一個屬于該類的變量,叫對象(也可以理解為變量)。結構變量也好,對象也罷,他們都是一塊能夠存儲數(shù)據并且具有某種類型的內存空間,說白了他們就是一塊內存,這個內存中存著很多東西。

我們將上面的<<二、public和private權限修飾符>>中的結構Teacher定義成類看一下:

class Teacher
{
public: //結構成員缺省都有public屬性,所以可以省略public
	int number;
	char name[100];
	void num()
	{
		number++;
		age = 30;   //內部成員函數(shù)中可以訪問私有成員變量
	}
private:
	int age;
};
int main2()
{
	Teacher teacher;
	teacher.number = 1001;   //這里仍然可以和定義結構一樣正常調用成員變量并賦值
}

從上面的例子中,我們可以看出結構和類的作用應該是極其相似的,那么兩者有什么區(qū)別呢?

1、從訪問權限角度來看: 結構體和類具有不同的默認訪問控制屬性

①C++結構體Struct中,那些缺省(未定義的數(shù)據類型)的成員變量和成員函數(shù),默認訪問級別是public屬性,在外部都可以直接調用。

②C++類Class中,那些缺?。ㄎ炊x的數(shù)據類型)的成員變量和成員函數(shù),默認訪問級別是private屬性,外界是訪問不了的。

為了彌補這個問題,我們不管是定義類還是定義結構,全部明確定義上其訪問屬性(public、private),那么區(qū)別也就不是區(qū)別了。

2、從繼承角度來看:

①C++結構體中,默認是public繼承(子類可以訪問父類中成員);

②C++類中,默認是private繼承(子類不可以訪問父類中成員)。

為了彌補這個問題,我們不管是繼承類還是繼承結構,全部明確繼承屬性(public、private),那么區(qū)別也就不是區(qū)別了。

四、類的組織

書寫規(guī)范:

類的定義代碼會放在一個.h頭文件中,頭文件名可以跟類名相同,student.h

類的實現(xiàn)代碼會放在一個.cpp源文件中,student.cpp

下雨天,最愜意的事莫過于躺在床上靜靜聽雨,雨中入眠,連夢里也長出青苔。

到此這篇關于C++詳細講解函數(shù)調用與Struct和CLass的區(qū)別的文章就介紹到這了,更多相關C++函數(shù)調用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++重載的奧義之運算符重載詳解

    C++重載的奧義之運算符重載詳解

    函數(shù)的重載是指利用相同的函數(shù)名設計一系列功能相近,但是功能細節(jié)不一樣的函數(shù)接口;因此運算符重載也是指對于同一個運算符來說,它可以用于實現(xiàn)不同的功能。下面就一起來理解下運算符重載的應用吧
    2023-04-04
  • C++11的右值引用的具體使用

    C++11的右值引用的具體使用

    這篇文章主要介紹了C++11的右值引用的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C++隱式類型轉換運算符operator type()用法詳解

    C++隱式類型轉換運算符operator type()用法詳解

    這篇文章主要介紹了C++隱式類型轉換運算符operator type()用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • C語言中%c與%s的區(qū)別與劃分詳解

    C語言中%c與%s的區(qū)別與劃分詳解

    這篇文章主要介紹了C語言中%c與%s的區(qū)別與劃分詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 如何在C++中建立一個順序表

    如何在C++中建立一個順序表

    在使用順序表之前,首先創(chuàng)建一個空的順序表,也就是初始化順序表。這里,在程序中只需設置順序表的結點數(shù)量ListLen為0即可。這樣,后面需要添加的數(shù)據元素將從順序表的第一個位置存儲
    2013-10-10
  • C語言實現(xiàn)學生管理系統(tǒng)

    C語言實現(xiàn)學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C 語言中實現(xiàn)環(huán)形緩沖區(qū)

    C 語言中實現(xiàn)環(huán)形緩沖區(qū)

    本文主要是介紹 C語言實現(xiàn)環(huán)形緩沖區(qū),并附有詳細實現(xiàn)代碼,具有一定的參考價值,希望能幫助有需要的小伙伴
    2016-07-07
  • C++實現(xiàn)批量提取PDF內容

    C++實現(xiàn)批量提取PDF內容

    這篇文章主要為大家詳細介紹了如何使用C++批量提取PDF里文字內容并導出到表格以及批量給?PDF?文件改名,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • C語言實現(xiàn)一個簡單的掃雷游戲

    C語言實現(xiàn)一個簡單的掃雷游戲

    掃雷是電腦上很經典的游戲,特意去網上玩了一會,幾次調試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2021-10-10
  • FFmpeg實現(xiàn)音頻漸響效果參數(shù)值詳解

    FFmpeg實現(xiàn)音頻漸響效果參數(shù)值詳解

    這篇文章主要為大家介紹了FFmpeg實現(xiàn)音頻漸響效果參數(shù)值詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論