在其构造函数中引用实例

cout an instance in it's constructor function

本文关键字:引用 实例 构造函数      更新时间:2023-10-16

我知道这听起来可能很奇怪,有办法解决这个问题。但我只是想知道在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 );

如果你需要的话。然而,事实上没有必要使该操作员过载。只要有一个操作符就足够了,其中引用了类的对象作为参数。