[英]operator overloading [operator A() const]
有一个名为B的预定义类,如下所示:
class B
{
protected:
A ins;
public:
void print() {
cout<<"t";
}
operator A() const {
return ins;
}
};
谁能解释“ operator A()const”行的含义,以及如何将其用于获取主函数中的“ ins”?
这是一个转换运算符,它允许将B个对象转换为(广播到)A个对象。 让我们分解operator A() const {...}
等效于A convert_to_A() { return ins; }
A convert_to_A() { return ins; }
通过将其命名为operator A
,编译器可以自动使用它。
operator A
表示这是一个转换为类型A的运算符。
()
:转换运算符始终是不带参数的函数 。
const
因为将B强制转换为A 一定不能更改B的值 。 例如:
double d = 3.14;
int i = d;
此处d
已(隐式)转换为int。 i
的值为3,但d
仍为3.14-转换未更改原始值。
在您的代码上下文中,我们可以说:
允许:
void f(A an_a) {...}
B my_b;
f(my_b);
请注意,转换运算符返回ins
的副本 。 根据上下文,您可能需要将其更改为operator A&() const {...}
以返回引用而不是副本(例如,如果A是要复制的昂贵类)。 但是,这将允许调用者更改存储在B内的A,这可能是您不想要的。 为了防止复制,但不允许更改,您必须返回对A的const引用。这就是为什么您经常看到以下内容:
operator const A&() const { return ins;}
这意味着您可以将B实例强制转换为A并获得B的ins成员。
B b;
A a;
a = (A)b;
// a is now equal to the member `ins` of b. Depending on the implementation of operator = of class A, it was probably copied into the a variable.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.