我不是指类中的变量,而是整个类的默认值。
struct Scalar {
unsigned int value;
void toThePowerOf(int power);
// etc.
}
我希望能够做一些像
这样的事情Scaler foo;
foo.value = 2;
foo.toThePowerOf(2);
std::cout << foo << std::endl; // Outputs 4!
这在C ++中是否可行?
答案 0 :(得分:1)
不,课程的思维方式没有价值。
你可能想做的是重载&lt;&lt;操作者:
ostream& operator<<(ostream& output, const Scalar& val)
{
output << val.value;
return output;
}
答案 1 :(得分:0)
不,你不能但是你可以重载operator&lt;&lt;为你的班级和ostream获得理想的效果
std::ostream& operator << (std::ostream& out, const Scaler& foo)
{
return out << foo.value;
}
您的代码现在可以工作并产生欲望结果
答案 2 :(得分:0)
是。有可能的。只需初始化类的构造函数中的所有值。使用class而不是struct。
答案 3 :(得分:0)
在ctor中使用默认值。如果您不想进行隐式转换,请使ctor明确。
struct Scalar {
unsigned int value;
Scalar(int value=0) : value (value) {}
void toThePowerOf(int power) {
// naive implementation just for show
int new_value = 1;
assert(power >= 0); // or other error checking
for (; power > 0; --power) {
new_value *= value;
}
value = new_value;
}
friend std::ostream& operator<<(std::ostream &out, Scalar const &x) {
out << x.value;
return out;
}
};
答案 4 :(得分:0)
我的意思是该类的默认值,因此如果您仅通过名称
foo
调用该对象,则默认情况下会返回foo.value
。
实际上可以定义从Scalar
到int
的隐式转换:
struct Scalar
{
unsigned int value;
operator int() const
{
return value;
}
};
int main()
{
Scalar foo = {2};
std::cout << foo << std::endl;
}
但是隐式转换在C ++社区中通常是不受欢迎的,因为它可能使代码很难阅读。 (我想这就是为什么没人提到转换运算符的原因。)