簡體   English   中英

Base成員的重載下標運算符

[英]Overload subscript operator for base's member

#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';
}

我的問題是如何使main中的最后一行代碼起作用?

只需添加括號即可調用getter

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

但是總的來說,這不是一個好主意。 然后,您可以將基類中的char數組public ,甚至更好地使用std::string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM