繁体   English   中英

运算符重载[operator A()const]

[英]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-转换更改原始值。

在您的代码上下文中,我们可以说:

  1. 一个B对象包含一个隐藏的A对象
  2. 每个B都愿意“假装”成为A ...
  3. ...通过返回其中的A的副本

允许:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM