gpt4 book ai didi

C++继承问题

转载 作者:行者123 更新时间:2023-11-28 03:54:12 24 4
gpt4 key购买 nike

我希望我在这里得到了相关的代码。当我想获取已添加到 menu_1 中的菜单选项时,我遇到了一些问题。我有这个函数 on_select(int),我用它来获取一个子菜单的选项,这是我通过使用 display() 函数来完成的。但是当我编译时它会说 menu_option() 类中没有名为 display() 的函数,它是基类,但我想要的是访问位于 sub_menu() 类中的 display() 函数.

我已经尝试了多种方法从数组中获取相关对象但没有成功,所以我现在在这里寻求帮助。

我有以下 main()

#include <iostream>

using namespace std;

#include "menu.h"

int main()
{


sub_menu* main_menu = new sub_menu("Warehouse Store Menu");

sub_menu* menu_1 = new sub_menu("Menu1");

main_menu->add_option(new sub_menu("Menu2"));
main_menu->add_option(menu_1);

product_menu->add_option(new add_item("sub_item1"));
product_menu->add_option(new add_item("sub_item2"));
product_menu->add_option(new add_item("sub_item3"));

main_menu->display();
main_menu->on_select(1);

delete main_menu;

return 0;
}

头文件

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

const int MAX_SIZE = 9;

class menu_option
{
public:
menu_option(string const& n) : title(n) {};
virtual ~menu_option();

virtual void on_select(int) = 0;
string get_title() { return title; }
protected:
string title;
};


/* ------------------------------------- */
class sub_menu : public menu_option
{

public:
sub_menu(string const& n)
: menu_option(n) { no_item = 0; }

~sub_menu() { delete[] list; };

void on_select(int);

void add_option(menu_option*);
void display();

private:
menu_option* list[MAX_SIZE]; //container for options in the sub_menu
int no_item;

};

执行文件

void sub_menu::on_select(int i)
{
cout << (list[i])->get_title() << endl;
cout << (list[i])->display() << endl; //<------ Doesn't work
}

void sub_menu::add_option(menu_option* item)
{
list[no_item] = item;
no_item++;
}

void sub_menu::display()
{
cout << ">> " << get_title() << " <<"<< endl;
for( int i = 0; i < no_item; i++ )
{
cout << setw(2) << i << ": " << (list[i])->get_title() << endl;
}
}

最佳答案

你可以做你想做的事,但这很糟糕。在 on_select() 中调用 display() 时必须向下转换到 sub_menu。当然,它不会像您所拥有的那样工作,编译器会告诉您确切的原因。

另一个可能更好的选择(虽然没有清楚地了解问题空间可能不是最好的)是将 display() 作为虚函数添加到 menu_option 类。

关于C++继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com