例如,vector<double> A(5);
可以返回5个元素的向量。是否有可能在我们自己构建的class
中做类似的事情?
例如,我有一个名为Fruit的类。我应该写什么构造函数,Fruit A(5);
可以返回5 apples
。这意味着apples
是此类的私有成员,应该是一个大小为5的数组或向量。我没有写apples
的详细信息的原因是我不知道如何在成员中正确声明它并创建它的构造函数。
最后,在创建Fruit A(5);
之后,我是否只能通过在类中创建get()
函数来访问此数组的成员,或者有更方便的方法吗?
真的很感激,如果你能给我一些建议。谢谢!
答案 0 :(得分:3)
您希望商店apples
位于vector
或array
。然后,您想要覆盖[] operator
以访问您想要的内容。如下所示:
class Fruit
{
private:
vector<apple> apple_storage;
public:
int& operator[](int j) {return apple_storage[j];}
};
然后,您可以轻松使用A[3]
访问apple_storage
。
答案 1 :(得分:2)
最简单的策略是让您的类包含容器。如果您不想为其编写访问器,请将其设为公共成员:
class Fruit
{
public:
Fruit() { }
Fruit(int asize) : basket_(asize) { }
vector<apple> basket_ ;
} ;
然后你会创建它:
Fruit A(5) ;
// get an apple from Fruit
apple tmpapple= A.basket_[1] ;
答案 2 :(得分:0)
如果apple
没有太多细节,假设它们有默认构造函数,那么这是一种天真的方式。
class Fruits {
public:
typedef std::vector<apple> AppleArray;
typedef AppleArray::iterator AppleIterator;
typedef AppleArray::const_iterator AppleConstIterator;
Fruits(int appleCount)
: mApples(appleCount)
{
}
~Fruits()
{
}
apple& getAppleAt(size_t index)
{
return mApples.at(index);
}
const apple& getAppleAt(size_t index) const
{
return mApples.at(index);
}
AppleIterator getAppleBegin()
{
return mApples.begin();
}
AppleIterator getAppleEnd()
{
return mApples.end();
}
AppleConstIterator getAppleBegin() const
{
return mApples.begin();
}
AppleConstIterator getAppleEnd() const
{
return mApples.end();
}
size_t getAppleCount() const
{
return mApples.size();
}
private:
std::vector<apple> mApples;
};
我假设这不是生产代码,而是纯粹学习C ++。如果你要在现实生活中设计一个类似的东西,你需要考虑Apple
是Fruit
而Fruits
更像是一个或多个集合的集合,其中一个是Apple
。在这种情况下,您的Fruits
更像std::vector<Fruit*> fruits;
,然后您使用循环初始化Apple
列表中所需的fruits
个数。