/* 类模板的显示具体化*/
/*自定义Point 类 含x和y坐标(类型int,float,char*) 希望当 x 和 y是其他类型时以逗号分隔, 都是字符串时以|为分隔,第一个参数是字符串,第二个参数是其他类型时输出以||分隔 */
#include <iostream>
using namespace std;
//1、普通类模板
template <typename T1, typename T2>
class Point
{
private:
T1 m_x;
T2 m_y;
public:
Point(T1 x, T2 y) : m_x(x), m_y(y){};
T1 getX() const
{
return m_x;
}
T2 getY() const
{
return m_x;
}
void setX(T1 x)
{
m_x = x;
}
void setY(T2 y)
{
m_y = y;
}
void display() const
{
cout << "坐标为:" << m_x << "," << m_y << endl;
}
};
//2、全参显示具体化的类模板 (按字符串类型显示具体化)
template <>
class Point<char *, char *>
{
private:
char* m_x;
char* m_y;
public:
Point(char* x, char* y) : m_x(x), m_y(y){};
char* getX() const
{
return m_x;
}
char* getY() const
{
return m_x;
}
void setX(char* x)
{
m_x = x;
}
void setY(char* y)
{
m_y = y;
}
void display() const
{
cout << "坐标为:" << m_x << "|" << m_y << endl;
}
};
//3、部分参数显示具体化的类模板 (第一个参数字符串类型显示具体化)
template <typename T2>
class Point<char*, T2>
{
private:
char* m_x;
T2 m_y;
public:
Point(char* x, T2 y) : m_x(x), m_y(y){};
char* getX() const
{
return m_x;
}
T2 getY() const
{
return m_x;
}
void setX(char* x)
{
m_x = x;
}
void setY(T2 y)
{
m_y = y;
}
void display() const
{
cout << "坐标为:" << m_x << "||" << m_y << endl;
}
};
int main()
{
//1、类模板 常规类型
Point<int, float> p0(10, 25.6);
p0.display();
//2、对实参全char*的显示具体化 类模板
Point<char*,char*> *pst = new Point<char*,char*>("北纬45度", "东经37度");
pst ->display();
//3、对实参部分char*的显示具体化 类模板 (显示具体化模板优先级高于 普通模板)
Point<char*,int> *pst2 = new Point<char*,int>("北纬45度", 10);
pst2->display();
return 0;
}
类模板的显示具体化
最新推荐文章于 2023-06-21 10:55:58 发布