[英]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;
私有變量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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.