C++函数模板和类模板——DAY6

本文详细解析了类模板函数的定义位置、友元函数的使用场景及注意事项,包括函数重载、作用域限制等核心概念,并提供了类模板的声明与使用方法,帮助开发者更高效地进行代码复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.所有的类模板函数写在类的外部,在一个cpp中

                  普通函数需要在函数参数、函数返回值和函数名称那都加上<T>

template <typename T>
Complex<T>  Complex<T>::operator+ (Complex<T> &c2)
{
	Complex tmp(a+c2.a, b+c2.b);
	return tmp;
}

                   2.友元函数:①用友元函数重载<<>>

                               friend ostream& operator<<<T> (ostream &out, Complex<T>&c3) ;

                         ②友元函数:友元函数不是实现函数重载(非<<>>)

                                   1)需要在类前增加类的前置声明函数的前置声明,代码如下:

                                           

template<typename T>

class Complex; 

template<typename T>

Complex<T> mySub(Complex<T>&c1, Complex<T>&c2);

 

               2)类的内部声明必须写成:

friend Complex<T>mySub <T> (Complex<T>&c1, Complex<T>&c2);

                                    3)友元函数实现必须写成:

  template<typename T>
             Complex<T> mySub(Complex<T>&c1, Complex<T>&c2)

{

                  Complex<T> tmp(c1.a - c2.a, c1.b-c2.b);

                  return tmp;

}

                       4)友元函数调用必须写成                              

Complex<int> c4 = mySub<int>(c1, c2);

cout<<c4;

结论:友元函数只用来进行左移友移操作符重载。

2.所有的类模板函数写在类的外部,在不同的.h和.cpp中,即类模板函数说明和类模板实现分开

//类模板函数

构造函数

普通成员函数

友元函数

用友元函数重载<<>>;

用友元函数重载非<<>>

                   //要包含.cpp

归纳以上的介绍,可以这样声明和使用类模板:

1) 先写出一个实际的类。由于其语义明确,含义清楚,一般不会出错。

2) 将此类中准备改变的类型名(如int要改变为float或char)改用一个自己指定的虚拟类型名(如上例中的numtype)。

3) 在类声明前面加入一行,格式为:

    template <class 虚拟类型参数>

如:

    template <class numtype> //注意本行末尾无分号

    class Compare

    {…}; //类体

4) 用类模板定义对象时用以下形式:

类模板名<实际类型名>对象名;

类模板名<实际类型名>对象名(实参表列);

如:

    Compare<int> cmp;

    Compare<int> cmp(3,7);

5) 如果在类模板外定义成员函数,应写成类模板形式:

   template <class 虚拟类型参数>

函数类型类模板名<虚拟类型参数>::成员函数名(函数形参表列) {…}

关于类模板的几点说明:

1) 类模板的类型参数可以有一个或多个,每个类型前面都必须加class,如:

    template <class T1,class T2>

    class someclass

    {…};

在定义对象时分别代入实际的类型名,如:

    someclass<int,double> obj;

2) 和使用类一样,使用类模板时要注意其作用域,只能在其有效作用域内用它定义对象。

3) 模板可以有层次,一个类模板可以作为基类,派生出派生模板类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值