在其构造函数中引用实例
cout an instance in it's constructor function
我知道这听起来可能很奇怪,有办法解决这个问题。但我只是想知道在c++中这是否可能。
class Item{
public:
string name;
Item(string input){
name = input
cout << this; // unfortunately the std::ostream& operator<<(std::ostream& outstream, Item* item) are not parsed by compiler yet. and this simply prints out its address.
cout << *this; //I don't know how to override `cout << Item`.
}
}
std::ostream& operator<<(std::ostream& outstream, Item* item){
outstream << item->name;
return outstream;
}
std::ostream& operator<<(std::ostream& outstream, Item& item){
outstream << item.name;
return outstream;
}
尝试以下
std::ostream & operator <<( std::ostream &outstream, const class Item &item );
class Item
{
public:
std::string name;
Item( const std::string &input ) : name( input )
{
std::cout << *this;
}
};
std::ostream & operator<<( std::ostream &outstream, const Item &item )
{
outstream << item.name;
return outstream;
}
或者,如果数据成员名称将被定义为私有,那么您可以编写
class Item
{
private:
std::string name;
public:
Item( const std::string &input ) : name( input )
{
std::cout << *this;
}
friend std::ostream & operator <<( std::ostream &outstream, const Item &item );
};
std::ostream & operator<<( std::ostream &outstream, const Item &item )
{
outstream << item.name;
return outstream;
}
同样的方式,你可以超载操作员
std::ostream & operator <<( std::ostream &outstream, const class Item *item );
如果你需要的话。然而,事实上没有必要使该操作员过载。只要有一个操作符就足够了,其中引用了类的对象作为参数。
相关文章:
- 对显式实例化的模板函数的未定义引用
- 重载运算符*以获取对另一个类的实例的引用
- 为什么我不能引用指向实例化对象的函数的指针?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 将元组和整型实例合并到引用元组中
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 引用的静态强制转换强制模板实例化,其中不完整的类型很好
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 超出返回引用的单一实例生存期
- 反向函数不反转类实例化的引用字符串
- 通过引用将私有类实例传递到另一个类 C++ 的"get"函数中
- 多个实例保存对unique_ptr的引用
- 类模板实例化和通用引用
- 对Singleton的未定义引用::实例
- 为构造函数初始化引用实例变量提供默认值
- 在其构造函数中引用实例