我正在为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)
在我的代码的复制粘贴中编辑了错别字。
答案 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();