C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++自定义函数返回类型

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类的拷贝构造函数。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文