簡體   English   中英

模板類截斷雙打

[英]Templated class truncating doubles

我正在為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)

在我的代碼復制粘貼中編輯了錯別字。

您將成員變量聲明為int ,而不是T / value_type ,因此,盡管您可以傳入可以轉換為int任何內容,但它們會立即分配給int並且其他信息也會丟失。 也可以模板化成員變量的類型,例如代替

    int x;
    int y;

    T x; // Or value_type, though you may need to reorder declarations
    T y;

私有變量xy應該是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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM