Как создать функцию с настройками аргументов? - PullRequest
0 голосов
/ 07 декабря 2010

Создайте функцию, у которой может быть другой список аргументов.
как то так

void s(int d, double t);
void s(string d, UNIT e);

спасибо заранее.
Редактировать 2:
Хорошо, когда я пробую это с моим классом, это не работает ...
вот мой базовый класс

class GUIInterface
{
public:
    .....
    virtual void LoadFile(string fileName) = 0;
    virtual void LoadFile(LPCWSTR fileName) = 0;
        ....
};

Я получаю эту ошибку.

error C2259: 'GUIButtons' : cannot instantiate abstract class
1>          due to following members:
1>          'void GUIInterface::LoadFile(LPCWSTR)' : is abstract

Хорошо, в моих кнопках GUIB я переопределяю virtual void LoadFile(string fileName) = 0;, но я не переопределяю второй.
как это

class GUIButtons : public GUIInterface
{
     .....
     void LoadFile(string fileName) { ... }
     ...
}

1 Ответ

4 голосов
/ 07 декабря 2010

Перегрузка функций вполне допустима в C ++, если параметры могут создавать уникальное разрешение. В приведенном выше случае первого параметра всегда будет достаточно для однозначного разрешения одной из функций.

В контексте класса, если функции-члены определены в одном классе, он работает так же, как и для свободных функций.

Один сценарий, который ловит много новичков C ++, с наследованием:

class Foo {
public:
    void s(int d, double t);
};

class Bar {
public:
    void s(string d, UNIT e);
};

// ...

Bar b;
b.s("hello", 42); // Fine
b.s(3, 4.5);      // FAIL

Второй вызов tp b.s не будет работать, потому что C ++ ищет первую область видимости, которая содержит символ. В этом случае он находит Bar::s, и даже если Bar::s(string, UNIT) не соответствует, C ++ не пойдет и не попробует базовый класс. Как только область с символом найдена, поиск тут же прекращается, независимо от того, найдена ли в этой точке соответствующая функция.

Вы можете обойти это поведение, явно введя символ базового класса в производный класс:

class Bar {
public:
    using Foo::s;
    void s(string d, UNIT e);
};

РЕДАКТИРОВАТЬ: В ответ на редактирование ОП 2 ...

Проблема, которую вы видите, не имеет ничего общего с перегрузкой. Вы просто не переопределяете чисто виртуальные функции-члены в производном классе GUIButtons. Переопределение функции базового класса с помощью соответствующей функции производного класса отличается от перегрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...