C++中的自定义函数返回类型

 更新时间:2022年11月07日 09:35:13   作者:见牛羊  
这篇文章主要介绍了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类的拷贝构造函数。 

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

相关文章

  • OpenCV实现区域分割和区域生长

    OpenCV实现区域分割和区域生长

    区域分割是图像处理中一个重要的任务,本文主要介绍了OpenCV实现区域分割和区域生长,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • C++生成随机数的实现代码

    C++生成随机数的实现代码

    这篇文章主要介绍了C++生成随机数的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C++ string与int的相互转换(使用C++11)

    C++ string与int的相互转换(使用C++11)

    本文主要介绍了C++ string与int的相互转换(使用C++11),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文带你了解C++中的右值引用与移动语义

    一文带你了解C++中的右值引用与移动语义

    本篇文章主要为大家详细介绍了C++中的右值引用与移动语义的相关知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2023-03-03
  • C语言实现简易扑克牌游戏

    C语言实现简易扑克牌游戏

    这篇文章主要为大家详细介绍了C语言实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • c语言实现多线程动画程序示例

    c语言实现多线程动画程序示例

    这篇文章主要介绍了c语言实现多线程动画程序示例,该程序是利用opengl图形库与fmod音频库写的一个简单3d动画程序,需要的朋友可以参考下
    2014-04-04
  • 深入分析C++中几个最不常用的关键字

    深入分析C++中几个最不常用的关键字

    本篇文章是对C++中几个最不常用的关键字进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言中字符串的两种定义方式详解

    C语言中字符串的两种定义方式详解

    这篇文章主要为大家详细介绍了C语言中字符串的两种定义方式,小编觉得这篇文章写的还不错,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • c语言阶乘之和问题示例详解

    c语言阶乘之和问题示例详解

    这篇文章主要给大家介绍了关于c语言阶乘之和问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 关于C++静态数据成员的实现讲解

    关于C++静态数据成员的实现讲解

    今天小编就为大家分享一篇关于关于C++静态数据成员的实现讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论