我会直接进入一个例子,我认为它更容易失败。 音乐Cd有曲目。如何访问音乐Cd类中的“TrackInfo”矢量(XTrackInfo)数据? 我想打印,甚至改变价值观,我不知道如何。 感谢C++如何访问由Composition创建的矢量数据?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <numeric>
class XTrackInfo
{
std::string m_TrackName;
int m_Length;
public:
XTrackInfo() {}
XTrackInfo(std::string TrackName, int Length):
m_TrackName(std::move(TrackName)),
m_Length(Length)
{}
void SetTrackName(std::string TrackName) { m_TrackName = std::move(TrackName); }
void SetTrackLength(int Length) { m_Length = Length; }
const std::string& GetTrackName() const { return m_TrackName; }
int GetTrackLength() const { return m_Length; }
};
class XMusicCd
{
private:
std::string m_Author;
std::vector<XTrackInfo> m_TrackInfo;
public:
XMusicCd() {}
XMusicCd(std::string Author, std::vector<XTrackInfo> Tracks):
m_Author(std::move(Author)),
m_TrackInfo(std::move(Tracks))
{}
void SetAuthor(std::string Author) { m_Author = std::move(Author); }
const std::string& GetAuthor() const { return m_Author; }
const std::vector<XTrackInfo> GetTracks() const { return m_TrackInfo;}
int GetLength() const; // Left incomplete on purpose; you will implement it later
void AddTrack(XTrackInfo NewTrack){
m_TrackInfo.emplace_back(std::move(NewTrack));
}
};
void PrintCdContents(const XMusicCd& Cd)
{
std::cout << "Author : " << Cd.GetAuthor() << "\n";
std::cout << "\n" << std::endl;
std::cout << "Track Info" << std::endl;
//problems here :)
}
int main()
{
// You may not change this function
XMusicCd MyCd;
MyCd.SetAuthor("Hello World");
MyCd.AddTrack(XTrackInfo("This is a test", 100));
MyCd.AddTrack(XTrackInfo("This is a test 2", 200));
PrintCdContents(MyCd);
}
这是一门功课的问题吗?您可以在XMusicCd方法中使用XTrackInfo的公共接口,例如调用GetTrackName()。 – Jens 2014-09-03 16:11:34
它不像你在@Messa中看到的那样明显。 – marco 2014-09-03 16:23:52
答案仍然很明显,但问题不是:-)如果你用一些代码行写了一个非常小的例子,说“在这里我想做这个或那个,但我不知道怎么样”。只是syaing“我怎么可以访问”我不清楚。 – Jens 2014-09-03 16:48:51