如何在动态对象数组中访问私有成员变量?

时间:2018-09-09 17:02:55

标签: c++ arrays class object pointers

我有两节课。类WorldList拥有一个指向WordOccurence对象的动态数组的指针:

class WordOccurrence {
public:
{...member functions...}
private:
    string word_;
    int num_;
};

class WordList{
public:
WordList(WordList&);
{...member functions...}
private:
    WordOccurrence *wordArray_; 

    int size_;
};

这是我的问题:当我尝试访问WordOccurence变量时,我的复制构造函数中出现错误。我的副本构造函数如下所示:

WordList::WordList(WordList &rhs){
    size_ = rhs.size_;
    wordArray_ = new WordOccurrence[rhs.size_];
    for(int i = 0; i < rhs.size_; ++i){
        wordArray_[i]->word_ = rhs.wordArray_[i]->getWord();
        wordArray_[i]->num_ = rhs.wordArray_[i]->getNum();
    }
}

我要说的错误:

  

错误:成员引用类型'WordOccurrence'不是指针;做了   您是要使用“。”?

     

错误:“ word_”是“ WordOccurrence”的私人成员

,并重复num_ variable

有人可以阐明我在这里可能会缺少什么吗?我认为可以通过指向特定对象的指针访问私有成员变量,这不是箭头运算符背后的想法吗?

1 个答案:

答案 0 :(得分:0)

您的wordArray_被定义为指向WordOccurrence的指针:

    WordOccurrence *wordArray_

因此wordArray_[i]的类型引用了WordOccurrence对象。要访问对象的成员,应使用.而不是->

仍然存在的问题是,您尝试直接设置新事件的成员:

    wordArray_[i].word_ = rhs.wordArray_[i].getWord();
    wordArray_[i].num_ = rhs.wordArray_[i].getNum();

现在getWord()getNum()是公开的,但是word_num_对WordOccurence来说是私有的,因此对WordList不可见。

一种简单的肮脏方法是让Wordlist成为WordOccurence的朋友:

class WordOccurence {
    ...
    friend class WordList; 
};

一种更简洁的方法是依靠WordOccurences的副本构造函数:

WordList::WordList(WordList &rhs){
    size_ = rhs.size_;
    wordArray_ = new WordOccurrence[rhs.size_];
    for(int i = 0; i < rhs.size_; ++i){
        wordArray_[i] = rhs.wordArray_[i]; 
    }
}

现在,更好的方法是将wordArray_定义为vector<WordOccurence>而不是数组:您将不必再担心它的副本。