C++模板

要點(diǎn)

  • 模板函數(shù)在類的外部定義
  • 友元函數(shù)在類的外部定義(<<的重載)
  • 模板類中靜態(tài)變量的使用規(guī)則

示例

Array.h

#pragma once
#include<iostream>
using namespace std;
template<typename T>
class Array
{
private:
    int len;
    T *data;
    friend ostream& operator<<<T>(ostream &out, Array<T>& array);

public:
    static int x;
    static T y;
    Array(int len);
    ~Array();
    int getLen();
    T* getData();
    T& operator[] (int index);
    Array<T>& operator=(Array<T>& array);
    Array(Array<T>& array);
};

Array.cpp

#include "stdafx.h"
#include "Array.h"
#include<iostream>
using namespace std;
template<typename T>
Array<T>::Array(int len)
{
    this->len = len;
    if(len>0)
        this->data = new T[len];
    else{
        this->data = NULL;
    }
}

template<typename T>
Array<T>::~Array()
{
    if (this->data != NULL) {
        delete []this->data;
    }
}

template<typename T>
int Array<T>::getLen()
{
    return this->len;
}

template<typename T>
T * Array<T>::getData()
{
    return this->data;
}

template<typename T>
T& Array<T>::operator[](int index)
{
    return this->data[index];
}

template<typename T>
Array<T> & Array<T>::operator=(Array<T>& array)
{
    cout << "執(zhí)行=運(yùn)算" << endl;
    if (this->data != NULL) {
        delete[]this->data;
    }
    this->len = array.getLen();
    this->data = new T[len];
    for (int i = 0; i < len; i++) {
        this->data[i] = array[i];
    }
    return *this;
}

template<typename T>
Array<T>::Array(Array<T>& array)
{
    cout << "執(zhí)行copy構(gòu)造函數(shù)" << endl;
    this->len = array.getLen();
    this->data = new T[this->len];
    for (int i = 0; i < this->len; i++) {
        this->data[i] = array[i];
    }
}

template<typename T>
ostream& operator<<(ostream &out, Array<T>& array) {
    for (int i = 0; i < array.len; i++) {
        out << array[i]<<" ";
    }
    out << endl;
    return out;
}
template<typename T>
int Array<T>::x = 10;

template<typename T>
T Array<T>::y;

test.cpp

// ArrayDemo.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//

#include "stdafx.h"
#include "Array.cpp"
#include "iostream"
using namespace std;
int main()
{
    Array<int> array(2);
    array[0] = 1;
    array[1] = 2;
    cout <<"array =>"<< array;
    Array<int> array1 = array;
    cout << "array1=>" << array1;
    Array<int> array2(3);
    array2[0] = 10;
    array2[1] = 20;
    array2[2] = 30;
    cout << "array2=>" << array2 ;
    array2 = array;
    cout << "array2=>" << array2;
    cout << "Array<int>::x  =>" << Array<int>::x << endl;
    Array<int>::x = 100;
    Array<char>::x = 1;
    cout << "Array<int>::x  =>"<<Array<int>::x << endl;
    cout <<"Array<char>::x =>"<< Array<char>::x << endl;
    Array<float>::y = 1000;
    cout << Array<float>::y << endl;
    return 0;
}

運(yùn)行結(jié)果:


運(yùn)行結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • C++ 模板簡(jiǎn)介 一、模板 使用模板的目的就是能夠讓程序員編寫與類型無(wú)關(guān)的代碼。 模板是一種對(duì)類型進(jìn)行參數(shù)化的工具...
    MinoyJet閱讀 2,419評(píng)論 0 12
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,536評(píng)論 1 51
  • 我們想要定義多個(gè)函數(shù),每個(gè)函數(shù)比較一種給定類型的值,可能定義多個(gè)重載函數(shù)。 這兩個(gè)函數(shù)幾乎是相同的,唯一不同就是參...
    Wangcy閱讀 354評(píng)論 0 0
  • 文 / 鄔健敏 編輯 / 阿甘 分享環(huán)節(jié)結(jié)束后,群友開(kāi)始提問(wèn),短短的半小時(shí)內(nèi),竟提出了20多個(gè)問(wèn)題,而問(wèn)題主要...
    阿甘籌眾閱讀 464評(píng)論 0 1
  • 今天是靈性寫作的第二天,跟隨我靈性的指引,我來(lái)了,今天的主題是:我值得過(guò)最好的生活。不是因?yàn)槲叶嗝吹呐Α⒍嗝吹母?..
    程程鈺雯私人2號(hào)閱讀 523評(píng)論 0 0