数组和类?

时间:2016-07-01 16:15:03

标签: c++ arrays object member subobject

我是C ++的新手并且在一个项目中工作,我有一个类的实例数组,在该类中我有一个结构,我有一个函数。 如何在主代码块中使用该功能。我试过了

class artwork {
    struct art {
        // the struct art contains important information such as artist, title and medium. 
    private:
        string artist;
    public:
        void setArtist(string values);
        string getArtist();
    };

    void artwork::art::setArtist(string values) {
        artist = values;
    }

int main (){
    artwork myartwork[500];
    for (int i = 0; i < 500; i++) {

        ///-----------------------------------
        ///-----------------------------------
        // below is where the error occurs? How do I reference setArtist?
        ///-----------------------------------
        ///-----------------------------------

        cout << myartwork[0].art.setArtist("Tim");
    }
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

这里需要改变几件事:

  1. class artwork需要art
  2. 类型的成员变量
  3. 该成员变量需要公开
  4. 成员变量需要具有与art不同的名称,因为它已经命名了结构的类型
  5. artwork
  6. 需要一个结束大括号和分号

    您的代码可能会解决此类问题:

    class artwork {
    public:
        struct art {
        private:
            string artist;
        public:
            void setArtist(string values){artist = values;}
            string getArtist(){return artist;}
        } art_;
    };
    
    int main (){
        artwork myartwork[500];
         for(int i = 0; i < 500; i++) {
             myartwork[i].art_.setArtist("Tim");
             cout << myartwork[i].art_.getArtist();
    
         }
    }
    

    其他有用的提示:

    1. 通过引用传递对象
    2. 在构造函数中初始化而不是使用初始化方法
    3. 首选对数据聚合类型的构造函数进行赋值初始化
    4. 针对数组大小而不是幻数
    5. 进行循环
    6. 通过const引用使getter返回
    7. 制作无法改变对象const状态的方法
    8. 使成员在对象const的生命周期内不会改变
    9. 修改

      将您的类定义视为蓝图,将成员视为实际对象。如果我们想要一个具有多个artwork对象的art,那么在合作的情况下,我们可以这样做:

      class artwork {
      public:
          struct art {
          private:
              string artist;
          public:
              void setArtist(string values){artist = values;}
              string getArtist(){return artist;}
          };
      
          art art1_;
          art art2_;
      };
      

      请注意,我们没有定义struct两次,我们只定义了2个对象。然后,如果我们有一个艺术品对象:artwork foo,我们可以这样做:

      foo.art1_("Sam Arnold"s);
      foo.art2_("Jonathan Mee"s);
      

答案 1 :(得分:-1)

很难根据问题中提供的内容来判断,但是你应该知道C ++会使所有的班级成员和#34;私人&#34;除非另有规定。在这种情况下:

cout << myartwork[0].art.setArtist("Tim");

会失败有两个原因:

  1. setArtist不可公开访问(因为艺术品是私人的,SetArtist是公开的并不重要,你无法从外面获取)
  2. cout很可能是期待的 输出的东西,所以setArtist(返回void)很可能 提出问题