C 模板 35 類模板物件做函式引數的三種情況

2021-10-08 02:13:55 字數 1956 閱讀 3681

接著來學習類模板作為函式引數傳入是如何使用,如果需要把類模板作為引數一起傳入到函式中,一般有三種情況,下面分別用**來解釋這三種情況。

1.指定傳入型別

就是在引數中,就指定型別,而不是, 而是直接指定確定型別,例如。看下面**,在printperson1()就是引數指定特定型別

#include #include using namespace std;

class person1

};class person2

};//類模板

template class person

t1 m_name;

t2 m_age;

void showperson()

};// 指定傳入型別

void printperson1(person&p)

void test01()

int main()

這段**可以成功執行起來, 函式引數用到了類模板,傳入的時候就指定了型別。

2.引數模板化

就是引數也使用模板,但是在引數上一行需要使用template說明引數t1 t2是模板引數

#include #include using namespace std;

class person1

};class person2

};//類模板

template class person

t1 m_name;

t2 m_age;

void showperson()

};// 引數模板化

template void printperson1(person&p)

void test01()

int main()

上面50 51行**就是引數模板化。這樣可以寫不同test()方法,裡面不同引數型別都可以呼叫printperson()函式。

如果我們想看t1 和t2模板中型別,可以使用下面方法進行列印。

// 引數模板化

template void printperson1(person&p)

執行結果

上面第二行,在c++中string型別的原名就是這麼長。不同c++編譯環境,string的名稱顯示都不一樣

3.整個類模板化傳入

就是類名稱和引數都做成乙個模板,就乙個t

#include #include using namespace std;

class person1

};class person2

};//類模板

template class person

t1 m_name;

t2 m_age;

void showperson()

};// 整個引數模板化

template void printperson1(t &p)

void test01()

int main()

執行

上面列印型別的名稱,顯示不是很友好,能看出乙個大概。沒有在vs編譯環境顯示友好。下面貼乙個在vs 2015上執行的效果截圖

這個在vs ide環境下就顯示很清楚,這個t型別是class 類名稱是person,裡面有兩個引數,乙個是string,乙個是int型別。

c 類模板物件做函式引數

類模板物件做函式引數 學習目標 一共有三種傳入方式 指定傳入的型別 直接顯示物件的資料型別 引數模板化 將物件中的引數變為模板進行傳遞 整個類模板化 將這個物件型別 模板化進行傳遞 示例 include 類模板 template class person void showperson public...

類模板物件做函式引數

指定傳入的型別 直接顯示物件的資料型別 引數模板化 將物件中的引數變為模板進行傳遞 整個類模板化 將這個物件型別 模板化進行傳遞 include include using namespace std 類模板 templateclass person void showperson public n...

類模板物件做函式引數

類模板中成員函式和普通類中成員函式建立是有區別的 1 普通成員函式一開始就可以建立 2 類模板中的成員函式在呼叫時才建立 學習目標 類模板例項化出的物件,向函式傳參的方式 1 指定傳入的型別,直接顯示物件的資料型別 2 引數模板化,將物件中的引數變為模板進行傳遞 3 整個類模板化,將這個物件型別模板...