如何在C ++中的Album类中存储曲目列表?

时间:2018-05-29 22:11:49

标签: c++ arrays list

我制作了一个基本上只是唱片公司经理的节目(我只是为了好玩而制作东西),而且我有一些课程。到目前为止,类RecordLabel,类Rapper和类Album。这张专辑:

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

class Album
{
public:
    void getAlbumName() const;
    string setAlbumName(string);
    void getNumTracks() const;
    int setNumTracks(int);
    void getTracklist() const;
    string setTracklist(string);
private:
    string albumName;
    int numTracks;
    string tracklist[];
};

所以我不确定跟踪列表。我的第一个想法是使用你可以看到的阵列,但说实话,我不确定什么是最好的。我可以使用链表吗?我应该使用指针数组吗?我对指针数组和列表等事情的了解总是有些不确定,所以我认为这是学习内容的好机会。

编辑:我应该更清楚:tracklist只是一种方法来存储专辑中很多曲目的标题。

1 个答案:

答案 0 :(得分:0)

首先,使用命名空间std会导致细微的错误,正如Max Vollmer在评论中所提到的那样。

我更喜欢设置在构造函数中完成,没有太多理由继续更改Name之类的属性。

这看起来是经典的OOP,你有一个'专辑',它是'曲目'的集合,这些曲目有RecordLabel和Artist?比如说,一个艺术家可以是Emimem,输入'Rapper',类型'Hip Hop';而RecordLabel可以是Vanity,Open等。

所以,让我们说,像这样 -

class RecordLabel
{
  LableType m_Type;
  public:
  RecordLabel():m_Type(LableType::None) {}
  RecordLabel(LableType L)
  {
     m_Type = L;
  }
};

class Artist
{
  std::string m_Name;
  ArtistType  m_Type;
  ArtistGenre m_Genre;
public:
  Artist():m_Type(ArtistType::None), m_Genre(ArtistGenre::None) {}
  Artist(const std::string Name, ArtistType Type, ArtistGenre Genre)
  {
    m_Name = Name; m_Type = Type; m_Genre = Genre;
  }
};

class Track
{

std::string m_TrackName;
Artist      m_Artist;
RecordLabel m_Lable;
public: 
Track(const std::string Name, const Artist& A, const RecordLabel& R)
{
    m_TrackName = Name;
    m_Artist    = A; 
    m_Lable     = R;
}

friend ostream& operator<<(ostream& os, const Track& dt)
{
    std::cout<<"TrackName: "<<dt.m_TrackName;
    return os;
}
};

class Album
{
std::string        m_albumName;
std::vector<Track> m_Tracks;

public: Album(const std::string& Name)  
    {
        m_albumName = Name;
    }

void AddTrack(const Track& T)
{
    m_Tracks.push_back(T);
}

friend ostream& operator<<(ostream& os, const Album& dt)
{
    cout<<"Album Name: "<<dt.m_albumName<<"\n";
    for(auto It: dt.m_Tracks)
    {
        std::cout<<It<<"\n";         
    } return os;
}
};

工作代码here.