C++转换运算符

发布于 2024-11-18 17:30:11 字数 742 浏览 0 评论 0原文

我知道这笔交易。编译器尝试在转换运算符的帮助下将一个对象转换为其他对象的类型。有两种方法可以做到这一点。构造函数(将一个类转换为另一个类)或转换运算符。所以,这个只是为了测试我是否完全掌握了这些概念。下面的代码给出了错误

using namespace std ;
class A
{
    int i ;
    public:
            A(int a=0){this->i=a;}
            A operator+(const A& b){
                    A c ;
                    return c(this->i+b.i);
            }
            void show()
            {
                    cout<<i<<endl;
            }
 };
int main()
{
    A a1(1),a2(2),a3;
    a3=a2+a1;
    a3.show();
    return 0;
 }

,我猜错误出在运算符 + 中。当我尝试分配 A(i) 时。没有匹配可以从 int 创建 A 的运算符。

但是然后我看到这个 A 的构造函数潜伏在后面。它可以将 int 转换为 A 。假设,它确实将 int 转换为 A 。然后,调用变成 A(B) 。这相当于复制构造函数。因此,这呼叫应该有效。但事实并非如此。总而言之,我很困惑。

请帮忙。

I know the deal .The compiler tries to convert one object into the other objects's type with the help of conversion operator .Two ways to do this .Constructor (Converts a class to the other) or conversion operator .So , this one is just to test if I am thorough with the concepts .The code below gives the error

using namespace std ;
class A
{
    int i ;
    public:
            A(int a=0){this->i=a;}
            A operator+(const A& b){
                    A c ;
                    return c(this->i+b.i);
            }
            void show()
            {
                    cout<<i<<endl;
            }
 };
int main()
{
    A a1(1),a2(2),a3;
    a3=a2+a1;
    a3.show();
    return 0;
 }

I guess the error is in the operator + .When I try to assign A(i) .There is no match for an operator which could create an A from an int .

But Then I see this A's constructor lurking behind .It can convert an int into an A .Suppose , it does convert int into an A.Then , the call becomes A(B) .This is equivalent to the copy constructor .Hence , this call should work .But it doesn't .All in all , am pretty confused .

Please help .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

征棹 2024-11-25 17:30:11

在这两行中,您告诉编译器使用默认构造函数构造一个 A 对象,然后调用其不存在的运算符 () (int) 并返回其返回值:

                A c ;
                return c(this->i+b.i);

使用

A c(i + b.i);
return c;

return A(i + b.i);

旁注,这是隐式转换运算符的示例,对于你的类:

operator int () const
{
    return i;
}

但是它们的使用闻起来像是糟糕的设计,并且可能导致糟糕的事情发生,比如隐式转换为 bool 或指针。请使用其他内容,例如 int toInt () const 成员函数。

In these two lines you are telling the compiler to construct an A object with the default constructor, then call its nonexistent operator () (int) and return its return value:

                A c ;
                return c(this->i+b.i);

Use either

A c(i + b.i);
return c;

or

return A(i + b.i);

On a side note, an example for an implicit conversion operator, for your class:

operator int () const
{
    return i;
}

But their use smells like bad design, and can cause bad stuff to happen, like implicit conversion to bool or a pointer. Use something else instead, like an int toInt () const member function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文