类模板的显示具体化

/* 类模板的显示具体化*/

/*自定义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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值