powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наследование и друзья.
8 сообщений из 8, страница 1 из 1
Наследование и друзья.
    #38446694
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс А и B. В классе B есть метод, который необходимо переопределить. Сложность в том, что этот метод использует приватный метод поля и для этого класс В обвялен другом класса А. В переопределённом методе также нужно использовать этот приватный метод. Это реально сделать не правя исходники А и В?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class A{
private:
    int get(){return 0;};
    friend class B;
};

class B{
public:
    A a;
    void run(){
        a.get();
    }
};

class C:B{
public:
    void run(){
        a.get();
    }
};
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38446890
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda,

friend-ы не наследуются.
Т.е. ответ на вопрос -- нельзя.
Переопределить метод можно, но к приватному члену A доступа он иметь не будет.
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38446953
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Да я знаю, что не наследуются. Мало ли, что еще в стандарте есть. Я не большой спец, поэтому и спрашиваю. Просто, исходники используются уже в проектах, а версии плодить не хотелось. Придется править, если ни как.
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38446978
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaДа я знаю, что не наследуются. Мало ли, что еще в стандарте есть.
Наследование друзей, если бы оно существовало, привело бы к бесполезности private
- отнаследовался от одного из классов-друзей и в статическом методе делай что хочешь.
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38447055
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,
В том то и дело. Был бы нужный мне метод протектед, вопросов не было бы, а так вроде в классе В метод run для переопределения мне доступен, а переопределить я его не могу. Потому что, юзает он приватный метод одной переменной, на основании того, что он друг, а я нет. Соблазняет зараза.
Я понимаю. Что это вопрос не к плюсам, а к разработчикам этих классов…
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38447189
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda,
если до исходников B можно добраться, то можно извернуться таким вот образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class A{
private:
    int get(){return 0;};
    friend class B;
};

class B{
public:
    A a;
    void run(){
        a_get();
    }
protected:
    int a_get() { return a.get(); }
};

class C:B{
public:
    void run(){
        a_get();
    }
};
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38447258
А если бы было так? :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class A{
private:
    int get(){return 0;};
    friend class B::run();
};

class B{
public:
    A a;
    void run(){
        a_get();
    }
protected:
    int a_get() { return a.get(); }
};

class C:B{
public:
    void run(){
        a_get();
    }
};
...
Рейтинг: 0 / 0
Наследование и друзья.
    #38447274
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorych,

Добраться можно. Можно и до класса А добраться. Тогда вообще только слово поменять. Только это запущенный продукт, его можно поправить, но только вместе с другими, более весомыми изменениями. А создавать ответвление и потом параллельно сопровождать две версии не хотелось бы. Но скорее всего, придется так сделать.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Наследование и друзья.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]