多点运算符 (c++ class)
Multiple dot operator (c++ class)
我必须实现一个 class Vector,它设置多维向量的坐标,并且在使用此特定代码调用时会起作用(我不能更改此部分):
const int NumOfDimensions = 5;
Vector x (NumOfDimensions);
x.Set(0, 1.1).Set(1, 1.2).Set(2, 1.3).Set(3, 1.4).Set(4, 1.5);
x.print();
输出必须是这样的:
(1.1, 1.2, 1.3, 1.4, 1.5)
这是我尝试过但无法正常工作的方法:
class Vector {
float *coordinates;
int dimensions;
public:
Vector(int k)
{
coordinates = new float[k];
dimensions = k;
}
void Set(int k, float wsp)
{
//Vector x(k+1);
coordinates[k] = wsp;
//return x;
}
void print()
{
int i;
cout<<"(";
for(i=0; i<dimensions; i++)
cout<<coordinates[i]<<", ";
cout<<")"<<endl;
}
};
所以我知道函数 Set 需要更改,并且可能 return 一个对象,但我尝试了很多不同的方法,但它就是行不通。我该如何修改?
如果您希望能够链接那种类型的方法,您需要return一个参考:
Vector& Set(int k, float wsp) {
// ...
return *this;
}
我认为,即使您在 Python、Ruby 等其他语言中看到很多这样的内容,该接口也不是非常 C++。
你最好使用 std::vector
来存储你的 coordinates
,C 风格的数组只是麻烦。这段代码实际上有严重的内存泄漏,因为您没有使用 delete[]
取消分配,没有定义析构函数。使用标准库容器可以减轻这种责任。
你可以做的另一件事是为它定义一个格式化程序,这样你就可以直接将它转储到 cout
而不是使用一个名为 print
的笨重方法给你的:
std::ostream& operator<<(std::ostream& stream, const Vector& vec);
这将允许在任何流上使用该格式化程序,而不仅仅是 cout
。
我必须实现一个 class Vector,它设置多维向量的坐标,并且在使用此特定代码调用时会起作用(我不能更改此部分):
const int NumOfDimensions = 5;
Vector x (NumOfDimensions);
x.Set(0, 1.1).Set(1, 1.2).Set(2, 1.3).Set(3, 1.4).Set(4, 1.5);
x.print();
输出必须是这样的:
(1.1, 1.2, 1.3, 1.4, 1.5)
这是我尝试过但无法正常工作的方法:
class Vector {
float *coordinates;
int dimensions;
public:
Vector(int k)
{
coordinates = new float[k];
dimensions = k;
}
void Set(int k, float wsp)
{
//Vector x(k+1);
coordinates[k] = wsp;
//return x;
}
void print()
{
int i;
cout<<"(";
for(i=0; i<dimensions; i++)
cout<<coordinates[i]<<", ";
cout<<")"<<endl;
}
};
所以我知道函数 Set 需要更改,并且可能 return 一个对象,但我尝试了很多不同的方法,但它就是行不通。我该如何修改?
如果您希望能够链接那种类型的方法,您需要return一个参考:
Vector& Set(int k, float wsp) {
// ...
return *this;
}
我认为,即使您在 Python、Ruby 等其他语言中看到很多这样的内容,该接口也不是非常 C++。
你最好使用 std::vector
来存储你的 coordinates
,C 风格的数组只是麻烦。这段代码实际上有严重的内存泄漏,因为您没有使用 delete[]
取消分配,没有定义析构函数。使用标准库容器可以减轻这种责任。
你可以做的另一件事是为它定义一个格式化程序,这样你就可以直接将它转储到 cout
而不是使用一个名为 print
的笨重方法给你的:
std::ostream& operator<<(std::ostream& stream, const Vector& vec);
这将允许在任何流上使用该格式化程序,而不仅仅是 cout
。