引用论坛里某一位的求助题目,我看到了,但解决不了,很想知道答案,求大神能够解惑

weixin_42359982 2018-07-09 10:17:40
1. 阅读代码,补充并实现Items类的其它必要成员函数,使得
主函数能有预期输出(Item类、Client类、main函数不得改动)。

#include <iostream>
using namespace std;

class Item
{
public:
Item(int n): value(n) { }
int number() const { return value; }
void number(int newVal) { value = newVal; }
private:
int value;
};

class Items
{
public:
Items() { }
~Items() { }
private: ///禁止拷贝和赋值
Items(const Items&);
Items(const Items&&); ///C++98标准下可去掉此行
Items& operator=(const Items&);
public:
///补充并实现其它成员函数
/// ....
private:
Item* items[10];
};


class Client
{
public:
void write(Items& aSet) const {
for(int i = 0; i < 10; ++i) {
aSet[i]->number(i * 2);
}
}

void read(const Items& aSet) const {
for(int i = 0; i < 10; ++i) {
cout << aSet[i]->number() << " ";
}
cout << endl;
}
};

int main()
{
Client client;
Items nums;

for(int i = 0; i < 10; ++i) {
nums[i] = new Item(i);
}

client.read(nums);
client.write(nums);
client.read(nums);

for(int i = 0; i < 10; ++i) {
delete nums[i];
}

return 0;
}


预期输出:
0 1 2 3 4 5 6 7 8 9
0 2 4 6 8 10 12 14 16 18





我是加了 Item* operator[](int i)const{
return items[i];
}这么一个函数;但是在nums[i] = new Item(i);这一段代码这行不通了,因为num[i]作为函数返回值不能作为左值。我想返回一个引用应该就可以了吧,但我作为一个菜鸟,水平有限。在这个题目要求下我实在是没办法实现。所以有哪位大神能帮忙解惑感激不尽
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42359982 2018-07-10
  • 打赏
  • 举报
回复
引用 4 楼 yangyangsnr 的回复:
定义两个下标运算符重载,分别是非const和const两个版本

Item*& operator[](const int i)
{
return items[i];
}
const Item* operator[](const int i) const
{
return items[i];
}

恩,大神很厉害,问题解决了
weixin_42359982 2018-07-09
  • 打赏
  • 举报
回复
引用 1 楼 sghcpt 的回复:
楼主,难道非要使用 nums[i] = new Item(i);这行代码来实现保存Item内容吗?下面的代码也可以实现哪个哪行代码的功能:
#include <iostream>
using namespace std;

class Item
{
public:
Item(int n) : value(n) { }
int number() const { return value; }
void number(int newVal) { value = newVal; }
private:
int value;
};

class Items
{
public:
Items() { }
~Items() { }
private: ///禁止拷贝和赋值
Items(const Items&);
Items(const Items&&); ///C++98标准下可去掉此行
Items& operator=(const Items&);
public:

Item* operator[](int i)const{
return items[i];
}

void pushitem(int nIndex, Item* pItem)
{
if (nIndex < 10)
{
items[nIndex] = pItem;
}
}
public:
///补充并实现其它成员函数
/// ....
private:
Item* items[10];
};


class Client
{
public:
void write(Items& aSet) const {
for (int i = 0; i < 10; ++i) {
aSet[i]->number(i * 2);
}
}

void read(const Items& aSet) const {
for (int i = 0; i < 10; ++i) {
cout << aSet[i]->number() << " ";
}
cout << endl;
}
};

int main()
{
Client client;
Items nums;

for (int i = 0; i < 10; ++i) {
nums.pushitem(i, new Item(i));
}

client.read(nums);
client.write(nums);
client.read(nums);

for (int i = 0; i < 10; ++i) {
delete nums[i];
}

getchar();
return 0;
}

不行的啊,题目里要求的只能在Items类里补充实现其他成员函数,不得改动其他类和main函数。我也知道只要给Items补充构造和析构的实现函数就完全OK了,可是main函数那不让改呀。这样我就没办法了
sghcpt 2018-07-09
  • 打赏
  • 举报
回复
楼主,难道非要使用 nums[i] = new Item(i);这行代码来实现保存Item内容吗?下面的代码也可以实现哪个哪行代码的功能:
#include <iostream>
using namespace std;

class Item
{
public:
Item(int n) : value(n) { }
int number() const { return value; }
void number(int newVal) { value = newVal; }
private:
int value;
};

class Items
{
public:
Items() { }
~Items() { }
private: ///禁止拷贝和赋值
Items(const Items&);
Items(const Items&&); ///C++98标准下可去掉此行
Items& operator=(const Items&);
public:

Item* operator[](int i)const{
return items[i];
}

void pushitem(int nIndex, Item* pItem)
{
if (nIndex < 10)
{
items[nIndex] = pItem;
}
}
public:
///补充并实现其它成员函数
/// ....
private:
Item* items[10];
};


class Client
{
public:
void write(Items& aSet) const {
for (int i = 0; i < 10; ++i) {
aSet[i]->number(i * 2);
}
}

void read(const Items& aSet) const {
for (int i = 0; i < 10; ++i) {
cout << aSet[i]->number() << " ";
}
cout << endl;
}
};

int main()
{
Client client;
Items nums;

for (int i = 0; i < 10; ++i) {
nums.pushitem(i, new Item(i));
}

client.read(nums);
client.write(nums);
client.read(nums);

for (int i = 0; i < 10; ++i) {
delete nums[i];
}

getchar();
return 0;
}
孤雲独去闲 2018-07-09
  • 打赏
  • 举报
回复
定义两个下标运算符重载,分别是非const和const两个版本

Item*& operator[](const int i)
{
return items[i];
}
const Item* operator[](const int i) const
{
return items[i];
}
weixin_42359982 2018-07-09
  • 打赏
  • 举报
回复
顶啊,别沉啊,有木有人能解决啊

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧