C++面向对象编程 模板

实战 Java 并发编程
实战为导向,从Java 并发原理出发,并集合开发实践,全面剖析 Java 并发编程。
wangxiaoming


          C++面向对象编程 

c++面向对象编程 模板的主要作用就是把类或者函数要处理的数据类型进行参数话, 表现为参数的多态性。
                                
                                  1、 模板函数
 

模板函数格式:
 
   template  类类型形参表
   返回类型   函数名(形参表)   template<class T>
  {                                                       T abs( T x)
                函数体;                           {     
 }                                                                return x>0?x:-x;
                                                           }
实例:
#include<iostream>
using namespace std;

template <class T>
void sorta(T *s, T *t)
{
    //冒泡算法实现排序被
    T *q,*p;
    T tmp;
    int flag ;
    for(q = s ; q <=t; q++)
    {//这里的等号要注意不可去掉
        //先是从头到尾扫描一遍
        //再从尾到头扫描一遍
        flag = 0;
        for( p = t - 1 ; p >= q; p--)
        {

            if(*(p+1)<*p)
            {//从最右边开始进行比较, 把最大的换到最右边
                tmp = *(p+1);
                *(p + 1) = *p;
                *p = tmp;
                flag = 1;
            }
        }
            if(!flag)
            {
                break;  // 上面不进行交换了表示已经结束了, 不要再循环下去了,减少程序执行时间
            }

    }
}
int main()
{
    int a[] = {1, 32,1 ,2 ,3 ,4 ,42 ,12 ,13 ,31 ,21 ,15};
    double  b[] = {1.22,1.01,1.03,1.05,12.3,1.12,2.7,2.6};
    sorta(a, a+12);
    for(int i = 0 ; i < 12; i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    sorta(b,b+7);
    for(int i = 0 ; i < 8 ; i++)
    {
        cout<<b[i]<<" ";
    }
    cout<<endl;
    return 0;
}

模板函数的形成是将函数模板实例化的过程      函数模板调用: 函数名(形参表)
2) 函数调用 的匹配顺序
     先寻找一个参数完全匹配的函数 如果找到了就调用他
    如果上面失败后, 寻找一个函数模板, 使其实例化  长生一个匹配的模板函数 就调用他
    上面的调用如果都失败, 那说明调用是非法的
     
     上面就是函数模板要实现的操作
          
                                                  2、 下面是类模板
类模板的主要作用是实现类需要的数据类型的参数化

声明类模板:
          类模板的成员函数被认为是函数模板  也叫做类属函数 
           类模板的格式:
              template 类型参数表                                                                  template <class T>
              class 类名                                                                                     class myclass
              {                                                                                                     {
                          类声明体;                                                                                     T a , b;
                };                                                                                                               public:
template  类型参数表                                                                                                    myclass(T x , T y);
返回类型  类名 类型名表:: 成员函数(型参数表)
{                                                                                                                    }
         成员函数体;                                                                                         template  <class T>
}                                                                                                                      void  myclass<T>::disp()
                                                                                                                        {
                                                                                                                                成员函数体;
                                                                                                                         }  
 类模板的调用 
                      Array<int> ad(5);

看实例吧
#include<iostream>
using namespace std;

template<class T>
class Tclass
{//ÀàÄ£°å
     T x, y;
     public:
        Tclass(T a,T b)
        {
            x = a;
            y = b;
        }
        T add(){return x+y;}
        void disp()
        {
            cout<<x<<" + "<<y<<" = "<<add()<<endl;
        }
};
int main()
{
    int a, b;
    double x, y;
    while(cin>>a>>b)
    {
        Tclass <int> sc(a,b);
        sc.disp();
        cin>>x>>y;
        Tclass <double> sd(x, y);
        sd.disp();
    }
    return 0;
}


                                                                                        


wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值