模板类截断双打

时间:2018-07-17 01:24:37

标签: c++ class templates c++14

我正在为C ++入门类的作业做作业,并且已经为这个问题三天了。我有一个模板类,可以接受任何数据类型,虽然我可以声明类型为double的对象,但实际上尝试初始化它们时,十进制会被截断。

我不确定什么很重要,所以请让我知道我所包括的内容是否过多。下面是类的定义:

template <class T>
class MyClass
{
    private:
        int x;
        int y;

    public:
        const typedef T value_type;
        static const int DEFAULT_VALUE;

        MyClass(value_type newX = DEFAULT_VALUE, 
                value_type newY = DEFAULT_VALUE);
        void setX(value_type newX);
        void setY(value_type newY);
        T getX() const;
        T getY() const;
        void print() const;
};

template <class T>
const int MyClass<T>::DEFAULT_VALUE = int();

这是实现:

template <class T>
OrderedPair<T>::OrderedPair(T newX, T newY)
{
    setX(newX);
    setY(newY);
}

template <class T>
void MyClass<T>::setX(value_type newX)
{
    x = newX;
}

template <class T>
void MyClass<T>::setY(value_type newY)
{
    y= newY;
}

template <class T>
T MyClass<T>::getX() const
{
    return x;
}

template <class T>
T MyClass<T>::getY() const
{
    return y;
}

template <class T>
void MyClass<T>::print() const
{
    std::cout << "(" << getX() << ", " << getY() << ")";
}

这是客户端代码:

MyClass<double> set;

set.setFirst(9.99);
set.setSecond(13.34);
set.print();

这是输出:

(9, 13)

在我的代码的复制粘贴中编辑了错别字。

2 个答案:

答案 0 :(得分:1)

您将成员变量声明为this.$.NewUserSync.path = null; this.$.NewUserSync.data = OrgData; this.$.NewUserSync.saveValue(`/Customer_Orgs/`).then(resp => { console.log(this.$.NewUserSync.path); // /Customer_Orgs/-LH_pEzgWJpv3mpYYTuA }) ,而不是int / T,因此,尽管您可以传递任何可以转换为value_type的变量,但它们会立即被分配到int并丢失其他信息。也可以模板化成员变量的类型,例如代替

int

    int x;
    int y;

答案 1 :(得分:1)

私有变量 x y 应该键入T而不是int。这就是为什么值会被截断的原因。

template <class T>
class MyClass
{
    public:
        const typedef T value_type;
        static const int DEFAULT_VALUE;

    private:
        value_type x;
        value_type y;

        MyClass(value_type newX = DEFAULT_VALUE, 
                value_type newY = DEFAULT_VALUE);
        void setX(value_type newX);
        void setY(value_type newY);
        T getX() const;
        T getY() const;
        void print() const;
};

template <class T>
const int MyClass<T>::DEFAULT_VALUE = int();