C++中的自定义函数返回类型
作者:见牛羊
这篇文章主要介绍了C++中的自定义函数返回类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
C++自定义函数返回类型
知识点小结
C++的基本数据类型限制了函数的返回类型,其不像python一样可以直接返回一个list,list里面可以包含多个想要返回的内容。
为了能够让C++的函数返回类型也可以不受数量上限制,我们可以先定义一个我们希望的数据类型的类或者结构体。
如果使用类的话,该类当中只包含成员变量和构造函数。
下面我们定义一个同时返回一个数字和一个字符串的数据类型。
具体代码如下:
#include <iostream> using namespace std; //通过设置一个只有构造函数的类,建立一个自定义的返回值类型 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; }
也可以使用结构体,代码如下:
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++函数返回值是自定义类型情况
在C++中,函数的返回值是自定义类型的情况主要分为两种,一种是非引用类型的自定义类;另一种是引用类型的自定义类。
1 返回值是自定义类的非引用类型
在这种情况下,使用该类拷贝构造函数,根据返回值来创建该类的新的对象。
class Person { Person(int age) {//构造函数 cout << "param constructor!" << endl; mAge = age; } public: Person(const Person& person) { //拷贝构造函数 mAge = person.mAge; } public: int mAge; }; Person MyFunc() {//返回值为非引用自定义类的函数 Person q(10); return q; }
此时,使用如下代码调用MyFunc()函数
Person p = MyFunc();
在MyFunc()函数返回了Person类的变量q之后,会调用Person的拷贝构造函数,将q的值拷贝给p。需要注意的是,以上代码并没有调用Person类的赋值表达式。即使不处理MyFunc()函数的返回值,直接调用MyFunc()函数
MyFunc();
此时依然会调用Person的拷贝构造函数,只是此时使用Person的拷贝构造函数将q的值拷贝给一个临时变量。
2 返回值是自定义类的引用类型
当函数的返回值是自定义类的引用类型时
Person& MyFunc() {//返回值为引用自定义类的函数 Person q(10); return q; }
如果不对MyFunc()函数的返回值进行处理,
MyFunc();
此时,不会调用Person类的拷贝构造函数。而将对MyFunc()函数的返回值赋值给其它对象,
Person p = MyBusiness();
此时依然会调用Person类的拷贝构造函数。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。