基础成员的重载下标运算符

时间:2017-06-25 11:13:50

标签: c++ overloading operator-keyword subscript

#include <iostream>
#include <string.h> // strlen, strcpy

这里我们有一个带有非默认ctor的Base类,一个名字的getter及其析构函数。

class Base {
  char *name_;
public:
  Base(const char* str)
    : name_{new char[strlen(str)]}
  {
    strcpy(name_,str);
  }
  char * name() const
  {
    return name_;
  }
  virtual ~Base()
  {
    delete [] name_;
  }
};

派生类公开继承自Base,并拥有自己的非默认ctor。

class Derived : public Base {
public:
  Derived(const char* str)
    : Base(str){}
};

我的问题是如何让main中的最后一行代码工作?

int main()
{
  char d1name[] {"d1"};
  Derived d1(d1name);
  std::cout << d1.name() << std::endl;

  d1.name[0] = 'D';
}

1 个答案:

答案 0 :(得分:0)

  

我的问题是如何让main中的最后一行代码工作?

只需添加括号即可调用getter

    d1.name()[0] = 'D';
        // ^^

但总的来说,这不是一个好主意。您可以在基类char中创建public数组,或者甚至更好地使用std::string