C++ 如何在没有显式方法声明的情况下返回值?

C++ 如何在没有显式方法声明的情况下返回值?,c++,C++,类在没有方法的情况下被调用时是否可能返回值 例如: class myClass{ private: int iVal; public: setVal(const int i){ iVal = i; } } myClass m; m.setVal(3); cout << m << endl; // In this case, m would return 3; 我显然漏掉了很多东西,但是这种类型的操作可能吗?首先,

类在没有方法的情况下被调用时是否可能返回值

例如:

class myClass{
    private:
        int iVal;

    public:
        setVal(const int i){ iVal = i; }
} 

myClass m;
m.setVal(3);

cout << m << endl;

// In this case, m would return 3;

我显然漏掉了很多东西,但是这种类型的操作可能吗?

首先,您不想返回值,您想向std::ostream写入一个值,其中cout是一个通常链接到控制台的实例

#include <iostream>

class myClass{
    private:
        int iVal;

    public:
        void setVal(const int i){ iVal = i; }
        int getVal() const { return iVal; }
};

std::ostream& operator<< ( std::ostream& in, const myClass& c)
{
    in << c.getVal();
    return in;
}

int main()
{

    myClass m;
    m.setVal(3);

    std::cout << m << std::endl;
}

首先,您不想返回一个值,而是想将一个值写入std::ostream,其中cout是一个通常链接到控制台的实例

#include <iostream>

class myClass{
    private:
        int iVal;

    public:
        void setVal(const int i){ iVal = i; }
        int getVal() const { return iVal; }
};

std::ostream& operator<< ( std::ostream& in, const myClass& c)
{
    in << c.getVal();
    return in;
}

int main()
{

    myClass m;
    m.setVal(3);

    std::cout << m << std::endl;
}
类在没有方法的情况下被调用时是否可能返回值

我怀疑我们必须将您的问题理解为在没有显式getter方法声明的情况下调用它时返回值

可以,您可以提供重载的强制转换运算符:

class myClass{
    private:
        int iVal;

    public:
        void setVal(const int i){ iVal = i; }
     // vvvvvvvvvvvvvv
        operator int() const {
             return iVal;
        }
};
请看报纸

您的代码也修复了一些其他小错误

这允许您在任何上下文中使用myClass,因为它只是一个int值:

在这种情况下,需要显式调用cast运算符,如下所示:

int main()
{
    myClass m;
    m.setVal(3);
    m.setVal(3.14);

    std::cout << (std::string)m << std::endl;
              // ^^^^^^^^^^^^^
}
当然,也可以重载std::ostream&操作符 类在没有方法的情况下被调用时是否可能返回值

我怀疑我们必须将您的问题理解为在没有显式getter方法声明的情况下调用它时返回值

可以,您可以提供重载的强制转换运算符:

class myClass{
    private:
        int iVal;

    public:
        void setVal(const int i){ iVal = i; }
     // vvvvvvvvvvvvvv
        operator int() const {
             return iVal;
        }
};
请看报纸

您的代码也修复了一些其他小错误

这允许您在任何上下文中使用myClass,因为它只是一个int值:

在这种情况下,需要显式调用cast运算符,如下所示:

int main()
{
    myClass m;
    m.setVal(3);
    m.setVal(3.14);

    std::cout << (std::string)m << std::endl;
              // ^^^^^^^^^^^^^
}

当然,也可以重载std::ostream&operator如果重载运算符,则提供一个operator@JeffQ您是只想得到正确的输出,还是想得到int x=m+5@宋元耀我怀疑这并不能回答这个问题。@πάνταῥεῖ - 我认为最好的方式来描述我的意思是类似于其他类如何处理这个问题。例如,字符串可以在没有方法的情况下打印,所以我想知道如何实现它operator@JeffQ您是只想得到正确的输出,还是想得到int x=m+5@宋元耀我怀疑这并不能回答这个问题。@πάνταῥεῖ - 我认为最好的方式来描述我的意思是类似于其他类如何处理这个问题。例如,一个字符串可以在没有方法的情况下打印,所以我想知道如何实现它。这如何回答实际的问题:当一个类在没有方法的情况下被调用时,它是否可能返回一个值??。嗯,有点模糊,但本质应该清楚。覆盖output操作符并不能真正解决这个问题,而只是针对流式输出的上下文。所以我相信这个问题可能是xy问题。所以我给出了一个可能有助于解决潜在问题的答案。提供cast操作符也提供了一种方法。。。因此,真正的答案是否定的:-我认为OP实际上是指不使用getter方法访问interned值。我认为相反。因为不清楚你的要求,我们现在应该投票结束吗?对不起,我不理解在这里回答问题。我想用户应该投反对票。。。非常好:-但是重载流输出操作符与类返回值没有任何关系。这如何回答实际问题:在没有方法的情况下调用类时是否可能返回值??。嗯,有点模糊,但本质应该清楚。覆盖output操作符并不能真正解决这个问题,而只是针对流式输出的上下文。所以我相信这个问题可能是xy问题。所以我给出了一个可能有助于解决潜在问题的答案。提供cast操作符也提供了一种方法。。。因此,真正的答案是否定的:-我认为OP实际上是指不使用getter方法访问interned值。我认为相反。因为不清楚你的要求,我们现在应该投票结束吗?对不起,我不理解在这里回答问题。我想用户应该投反对票。。。非常好:-但是重载stream output操作符与返回值的类无关。