Ostream方法不起作用
ostream method does not work
我有两个方法,第一个定义字符串:
我不明白为什么它没有做到,以及我如何从main调用这个方法。
Actor::operator std::string( ) const {
std::stringstream ss;
ss << this->_id;
std::string str1 = ss.str();
std::stringstream s;
s << this->_salary;
std::string str2 = s.str();
std::string str3 = "Actor first name = " + this->_firstname + ", last name = " + this->_lastname+", id = " + str1 + ", monthly salary = " + str2;
if (this->_hasoscar==true)
str3+=" was NOMINATED Oscar AWARD..";
return str3;
}
下一个需要打印出来
const Actor& Actor::print(std::ostream& os) {
os<< std::string();
return *this;
}
不清楚为什么要这样做,因为正常的工作方式是重载ostream操作符:
class Actor {
public:
friend std::ostream& operator<< (std::ostream& os, const Actor& a) {
os << "Actor first name = " + a._firstname +
", last name = " + a._lastname+", id = " +
a._id + ", monthly salary = " + a._salary;
if (this->_hasoscar) {
os << " was NOMINATED Oscar AWARD..";
}
return os;
}
};
通过这种方式,您可以从main中轻松地创建和打印actor:
Actor a;
cout << a;
第一个方法
Actor::operator std::string() const();
允许从Actor到字符串的隐式转换,例如:
Person a;
std::string s = a;
os<< std::string();
这不会调用到string
的转换,它创建一个临时字符串变量并将其写入流,因此它相当于:
os << "";
要调用转换操作符,需要告诉编译器要将对象转换为字符串(而不仅仅是构造一个空字符串)。这样做的显式方法是:
os << static_cast<std::string>(*this);
还有其他方法,例如:
os << std::string(*this);
os << (std::string)*this;
std::string s = *this;
os << s;
或者如果你喜欢不可读的代码,你可以显式调用转换操作符:
os << this->operator std::string();
(最后一种方法不是个好主意。)
转换操作符的定义非常愚蠢,并且比需要的慢得多。使用两个单独的字符串流和字符串连接是非常浪费的,你可以用一个字符串流来完成这一切:
Actor::operator std::string( ) const {
std::stringstream ss;
ss << "Actor first name = " << this->_firstname
<< ", last name = " << this->_lastname
<< ", id = " << this->_id
<< ", monthly salary = " << this->_salary;
if (this->_hasoscar==true)
ss << " was NOMINATED Oscar AWARD..";
return ss.str();
}
然而,正如Velthune所说,除非出于其他原因需要转换为字符串,否则输出类的通常方法是重载该类的operator<<
。
相关文章:
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- 转发声明在命名空间中不起作用的替代方法
- 基本加密和解密方法不起作用 C++ 11.
- 结构/方法不起作用
- 指向类中函数方法的指针不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 将字符数组设置为彼此相等的方法不起作用
- ConvertToReferencePoint 方法不起作用,获取作业参数的 NULL (HyperV 2016)
- 为什么方法不起作用?
- C boost :: bimap insert()方法不起作用
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 为什么这种交换方法不起作用
- 当应用于静态方法时,为什么constexpr属性不起作用
- Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用
- 返回值上的 C++ 方法链接不起作用
- 为什么这个逻辑在我的主循环上有效,但在方法上不起作用
- 如何调用孩子的方法:虚拟关键字不起作用
- StringStream的Str方法将不起作用.(不同类型的串联)(C )
- 非递归二进制树插入()方法不起作用
- C++中的Friend方法不起作用