c++ - 使用包含类的动态实例化后调用 C++ 重载运算符 [] 似乎不起作用

标签 c++ dynamic polymorphism operator-overloading

我是 C++ 新手,有 Java 和 C# 背景。我刚刚编写了一些代码来稍微熟悉一下 C++ 中的异常:

#include<iostream>
#include<string>
using namespace std;


class MyException
{
public:
    MyException(string message)
    {
        this->message = message;
    }

    string& getMessage()
    {
        return this->message;
    }

private:
    string message;
};


class MyClass
{
public:
    MyClass()
    {
        v = new string[2];
        v[0] = "wdeed";
        v[1] = "yyyyyyy";
    }
    ~MyClass()
    {
        delete[] v;
    }
    string& operator[](int index)
    {
        if (index < 0 || index > 1)
            throw MyException("index out of bound exception");

        return v[index];
    }
private:
    string *v;
};


int main()
{
    int index;

    //first option below is not working
    MyClass *myClass = new MyClass();

    //second option works:
    //MyClass myClass;


    cin >> index;
    cout << endl;

    try
    {
        cout << myClass[index];//this is where the error appears
    }
    catch (MyException& ex)
    {
        cout << ex.getMessage();
    }
    catch (...)
    {
        cout << "Other exception";
    }

    return 0;
}

语句“cout << myClass[index];”产生错误

仅当我使用动态分配(MyClass *myClass = new MyClass();)时出现的错误是:

  1. 没有运算符“<<”匹配这些操作数操作数类型为:std::ostream<

  2. 二进制“<<”:找不到采用“MyClass”类型右侧操作数的运算符(或者没有可接受的转换)

如何修复代码?

最佳答案

MyClass *myClass是一个指向 MyClass 的指针目的。因此,您需要在将其用作 MyClass 之前取消引用它。 :

(*myClass)[index];

但实际上,您不需要使用 new根本就在这里。 myClass应该只是一个自动对象(如注释掉的代码)和内部 std::string动态数组应该是 std::vector<std::string>相反。

关于c++ - 使用包含类的动态实例化后调用 C++ 重载运算符 [] 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34944962/

相关文章:

c++ - Project Euler 18 - C++ 通过引用传递数组

MySQL 使用子查询中的 WHERE 匹配多个结果

javascript - Jquery - 加载动态内容时悬停效果不起作用 - 带有主题标签的 URI

c++ - 具有派生类实例的工厂

C++ 就地放置 新

c++ - 统计()失败 : No such file or directory

c++ - 如何通过地址获取元组中元素的索引?

arrays - 在 bash 中将 argv 条目附加到数组(动态填充数组)

java - 如何防止父类(super class)调用重写的子类方法?

java - 将 Java 类重写为干净且可测试的代码