C++中的自定義函數(shù)返回類型
C++自定義函數(shù)返回類型
知識(shí)點(diǎn)小結(jié)
C++的基本數(shù)據(jù)類型限制了函數(shù)的返回類型,其不像python一樣可以直接返回一個(gè)list,list里面可以包含多個(gè)想要返回的內(nèi)容。
為了能夠讓C++的函數(shù)返回類型也可以不受數(shù)量上限制,我們可以先定義一個(gè)我們希望的數(shù)據(jù)類型的類或者結(jié)構(gòu)體。
如果使用類的話,該類當(dāng)中只包含成員變量和構(gòu)造函數(shù)。
下面我們定義一個(gè)同時(shí)返回一個(gè)數(shù)字和一個(gè)字符串的數(shù)據(jù)類型。
具體代碼如下:
#include <iostream>
using namespace std;
//通過(guò)設(shè)置一個(gè)只有構(gòu)造函數(shù)的類,建立一個(gè)自定義的返回值類型
class Returndata
{
public:
int id;
string name;
public:
Returndata(int id, string name)
{
this->id = id;
this->name = name;
}
};
Returndata createdata(int id, string name)
{
Returndata newdata(id, name);
return newdata;
}
int main()
{
Returndata a = createdata(1, "bob");
cout << a.id << " " << a.name << endl;
return 0;
}也可以使用結(jié)構(gòu)體,代碼如下:
struct Returndata
{
int id;
string name;
};
Returndata createdata(int id, string name)
{
//Returndata newdata(id, name);
Returndata newdata = {id, name};
//newdata.id = id;
//newdata.name = name;
return newdata;
}
int main()
{
Returndata a;
a = createdata(1, "bob");
cout << a.id << " " << a.name << endl;
return 0;
}C++函數(shù)返回值是自定義類型情況
在C++中,函數(shù)的返回值是自定義類型的情況主要分為兩種,一種是非引用類型的自定義類;另一種是引用類型的自定義類。
1 返回值是自定義類的非引用類型
在這種情況下,使用該類拷貝構(gòu)造函數(shù),根據(jù)返回值來(lái)創(chuàng)建該類的新的對(duì)象。
class Person {?
Person(int age) {//構(gòu)造函數(shù)?
cout << "param constructor!" << endl;?
mAge = age;?
}
?
public:?
Person(const Person& person) { //拷貝構(gòu)造函數(shù)?
mAge = person.mAge;?
}
?
public:?
int mAge;?
};
?
Person MyFunc() {//返回值為非引用自定義類的函數(shù)?
Person q(10);?
return q;?
}此時(shí),使用如下代碼調(diào)用MyFunc()函數(shù)
Person p = MyFunc();
在MyFunc()函數(shù)返回了Person類的變量q之后,會(huì)調(diào)用Person的拷貝構(gòu)造函數(shù),將q的值拷貝給p。需要注意的是,以上代碼并沒(méi)有調(diào)用Person類的賦值表達(dá)式。即使不處理MyFunc()函數(shù)的返回值,直接調(diào)用MyFunc()函數(shù)
MyFunc();
此時(shí)依然會(huì)調(diào)用Person的拷貝構(gòu)造函數(shù),只是此時(shí)使用Person的拷貝構(gòu)造函數(shù)將q的值拷貝給一個(gè)臨時(shí)變量。
2 返回值是自定義類的引用類型
當(dāng)函數(shù)的返回值是自定義類的引用類型時(shí)
Person& MyFunc() {//返回值為引用自定義類的函數(shù)?
Person q(10);?
return q;?
}如果不對(duì)MyFunc()函數(shù)的返回值進(jìn)行處理,
MyFunc();
此時(shí),不會(huì)調(diào)用Person類的拷貝構(gòu)造函數(shù)。而將對(duì)MyFunc()函數(shù)的返回值賦值給其它對(duì)象,
Person p = MyBusiness();
此時(shí)依然會(huì)調(diào)用Person類的拷貝構(gòu)造函數(shù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長(zhǎng)
區(qū)域分割是圖像處理中一個(gè)重要的任務(wù),本文主要介紹了OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長(zhǎng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02
C++生成隨機(jī)數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++生成隨機(jī)數(shù)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
C++ string與int的相互轉(zhuǎn)換(使用C++11)
本文主要介紹了C++ string與int的相互轉(zhuǎn)換(使用C++11),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
一文帶你了解C++中的右值引用與移動(dòng)語(yǔ)義
本篇文章主要為大家詳細(xì)介紹了C++中的右值引用與移動(dòng)語(yǔ)義的相關(guān)知識(shí),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2023-03-03
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
c語(yǔ)言實(shí)現(xiàn)多線程動(dòng)畫程序示例
這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)多線程動(dòng)畫程序示例,該程序是利用opengl圖形庫(kù)與fmod音頻庫(kù)寫的一個(gè)簡(jiǎn)單3d動(dòng)畫程序,需要的朋友可以參考下2014-04-04
關(guān)于C++靜態(tài)數(shù)據(jù)成員的實(shí)現(xiàn)講解
今天小編就為大家分享一篇關(guān)于關(guān)于C++靜態(tài)數(shù)據(jù)成員的實(shí)現(xiàn)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12

