没有成员函数的类实例的默认返回
Posted
技术标签:
【中文标题】没有成员函数的类实例的默认返回【英文标题】:Default return of class instance without member function 【发布时间】:2018-04-12 16:16:00 【问题描述】:当对象在某处使用时(不使用getter成员函数),是否可以让类默认返回特定的成员变量?
如果我有这门课:
class A
public:
A(int nr) : number(nr);
~A();
int getNr() return this->number ;
int number;
;
稍后在程序中设置和获取它的编号,我可以这样做:
int main()
A thing(23);
std::cout<<"Your number is: "<<thing.getNr();
return 0;
但我想做的是:
std::cout<<"Your number is: "<<thing;
并得到完全相同的结果,使其默认返回成员变量“number”。这可以以某种方式完成/设置吗?
我知道有人可能会想“为什么不直接使用整数呢?” - 我正在创建一个应该能够“变成的类>" 任何类型,然后像分配的类型一样,如果我能在这方面让它像整数、双精度和字符串一样,那就太好了。
【问题讨论】:
可能重复:***.com/questions/4469894/… en.cppreference.com/w/cpp/language/implicit_conversion看看这个 【参考方案1】:您的具体示例在A
上调用<<
stream insertion operator。这个运营商can be overloaded做你想做的事:
#include <iostream>
class A
public:
A(int nr) : number(nr)
~A()
int getNr() const return this->number;
int number;
;
std::ostream& operator<<(std::ostream& os, const A& a)
os << a.getNr();
return os;
int main(int, char *[])
A a(42);
std::cout << a << std::endl; // prints 42
请注意,我已对您的代码进行了其他一些小修复(修复了缺失的;
并删除了一些不必要的;将const
添加到getNr()
)。
对于其他情况,例如将A
类型的参数传递给接受不同类型参数的函数,您可以定义user-defined conversion operators,由编译器调用以将A
转换为不同类型。例如:
void doSomething(int x)
// ...
class A
public:
A(int nr) : number(nr)
~A()
int getNr() return this->number;
int number;
operator int() return getNr();
;
int main(int, char *[])
A a(42);
doSomething(a); // calls operator int() above
return 0;
小心使用用户定义的转换运算符。特别是,通常最好将它们标记为explicit
并使用static_cast<T>()
来触发转换。隐式转换会很快让您在重载解析方面遇到麻烦。
【讨论】:
以上是关于没有成员函数的类实例的默认返回的主要内容,如果未能解决你的问题,请参考以下文章