返回函数的几种类型

 返回对象的函数
#include<iostream.h>
class A
{
  int x;
public:
 A(int x){this->x=x;}
 void displayX(){cout<<x<<endl;}
};
A fun(int a){A obj(a); return obj;}
void main()
{int x; cin>>x;
 fun(x).displayX();
}
返回指针(地址)的函数1:
#include<iostream.h>
#include<string.h>
class Student
{
  int id;
  char name[10];
public:
 Student(int i,char *p)
 {id=i;
  strcpy(name,p);                                  //思考为什么name=n 不正确
 }
 int getID(){return id;}
 char *getName(){return name;}
};
void main()
{int i; char *n=new char[10];
 cin>>i; cin>>n;
 Student s1(i,n);
 cout<<s1.getID()<<endl;
 cout<<s1.getName ()<<endl;
}
返回指针(地址)的函数2:
#include<iostream.h>
#include<string.h>
class Student
{int grade[5];
 char name[10];
public:
 Student(int *g,char *n)
 {for(int i=0;i<5;i++)
   grade[i]=g[i];
  strcpy(name,n);
 }
 int *getG(){return grade;}
 char *getName(){return name;}
};
void main()
{int a[5]={100,80,90}; char b[10]="Smith";
Student s1(a,b);cout<<s1.getG()<<endl;
cout<<s1.getName ()<<endl;}
### 返回模板类型函数的实现方法 在 C++ 中,返回模板类型函数是一种允许函数返回值依赖于模板参数的设计模式。这种设计使得函数更加通用和灵活,能够适应多种数据类型。 #### 实现方式 为了使函数支持返回模板类型,可以将返回类型声明为模板参数的一部分。以下是几种常见的实现方式: 1. **基本形式** 基本的形式是让返回类型作为模板的一个参数。例如: ```cpp template<typename T> T add(T a, T b) { return a + b; } ``` 这里 `T` 是模板参数,既用于输入参数也用于返回值[^2]。 2. **多个模板参数** 如果需要处理不同的输入类型并指定返回类型,则可以通过引入额外的模板参数来实现更复杂的逻辑。例如: ```cpp template<typename T1, typename T2, typename RT> RT max(T1 a, T2 b) { return (b < a) ? static_cast<RT>(a) : static_cast<RT>(b); } ``` 上述代码中,`T1` 和 `T2` 表示两个可能不同类型的输入参数,而 `RT` 则表示期望的返回类型[^4]。 3. **特化模板函数** 对于某些特定的数据类型,可以对模板函数进行特化以优化性能或者满足特殊需求。例如: ```cpp template<> int max<int>(int a, int b) { return (b < a) ? a : b; } ``` 此处展示了针对整数类型的特化版本[^1]。 4. **显式模板实参** 当编译器无法自动推导出返回类型时,可以在调用时提供显式的模板实参。这通常发生在返回类型不同于任何输入参数的情况下。例如: ```cpp double result = max<double>(5, 7.8f); ``` 在此例子中,尽管输入分别是 `int` 和 `float`,但我们指定了返回类型应为 `double`[^2]。 #### 返回模板类型函数的作用 - **提高代码重用性** 使用返回模板类型可以使单一函数适用于各种数据类型,从而减少重复编码的工作量。 - **增强灵活性** 开发者可以根据实际应用场景自由选择合适的输入与输出组合,而不必受限于固定的数据结构或类型约束。 - **提升效率** 特定情况下通过对常用操作做专门优化(即全特化),可以获得更好的运行表现。 ```cpp #include <iostream> template<typename T1, typename T2, typename RT> RT multiply_and_add(T1 a, T2 b, T2 c){ return static_cast<RT>(a * b + c); } int main(){ float res_f = multiply_and_add<float,int,float>(2,3,4); // returns 10 as float std::cout << "Result with floats: " << res_f << "\n"; long res_l = multiply_and_add<long,double,long>(5L,6.0,7); // returns 37 as long integer std::cout << "Result with longs: " << res_l << "\n"; return 0; } ``` 以上程序片段演示了如何利用多重模板参数创建一个既能接受不同类型又能控制最终结果精度的多功能算术运算工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值