Форум программистов, компьютерный форум CyberForum.ru

Перемещение метода класса между секциями - C++

Восстановить пароль Регистрация
 
 
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
04.04.2014, 17:38     Перемещение метода класса между секциями #1
есть 2 класса
C++
1
2
3
4
5
6
7
8
class A{
public:
int ABS(int Count, ...);
int ARS(int Count, ...);
}
 
class B:public A{
}
как сделать чтобы метод ABS в классе В, был в секции private а не public?
а метод ARS так и остался в public
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 17:38     Перемещение метода класса между секциями
Посмотрите здесь:

C++ Вызов метода класса без создания экземпляра класса.
Оптимизация работы метода класса с объектами класса [C++] C++
C++ Вызов метода производного класса через обращение к методу базового класса
Вызов метода базового класса из класса-потомка C++
C++ Передача метода класса в качестве параметра для метода другого класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
04.04.2014, 18:29     Перемещение метода класса между секциями #2
C++
1
2
3
4
5
6
7
8
9
class A{
public:
int ARS(int Count, ...);
protected:
int ABS(int Count, ...);
}
 
class B:public A{
}
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
07.04.2014, 10:50  [ТС]     Перемещение метода класса между секциями #3
TSed, ты гений! а теперь тоже самое только не меняя класс А
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 12:03     Перемещение метода класса между секциями #4
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
как сделать чтобы метод ABS в классе В, был в секции private а не public?
Очевидно же:
C++
1
2
3
4
class B:public A{
    private:
    int ABS(int Count, ...); 
};
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
07.04.2014, 14:05  [ТС]     Перемещение метода класса между секциями #5
да, но так для нее придется писать реализацию, а если в ней переменное число параметров то я их не смогу передать в функцию родителя
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,185
Завершенные тесты: 1
07.04.2014, 14:20     Перемещение метода класса между секциями #6
C++
1
2
3
4
5
6
7
8
9
class A{
public:
int ABS(int Count, ...);
int ARS(int Count, ...);
}
class B:private A{
public:
int ARS(int Count, ...){A::ARC(Count,....);}
}
ABS будет private.
а public ARS будет вызывать private метод ARS из базового класса
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
07.04.2014, 14:32     Перемещение метода класса между секциями #7
2zss
Вы уверены в том что оно скомпилится?

Добавлено через 5 минут
1. Если класс А написан не Вами, то возможно там есть реализация через va_list.
2. Если класс А написан Вами, то возможно стоит добавить реализацию через va_list.

C++
1
int foo(char *fmt, va_list args, char *msg);
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 14:43     Перемещение метода класса между секциями #8
MrAndrey_ka, а зачем вообще такие сложности?
1. Эллипсис.
2. Сокрытие ранее доступной функции.

Какого рода параметры передаются? Может быть можно заменить массивом?
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,185
Завершенные тесты: 1
07.04.2014, 14:46     Перемещение метода класса между секциями #9
Цитата Сообщение от stima Посмотреть сообщение
Вы уверены в том что оно скомпилится?
А причем здесь va_list?
Отнаследовав класс с модификатором private мы получили private доступ
ко всем членам и методам базового класса, которые были public и protected.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 14:49     Перемещение метода класса между секциями #10
Цитата Сообщение от zss Посмотреть сообщение
А причем здесь va_list?
При том, что нельзя передать переменное число параметров из одной функции с эллипсисом в другую функцию с эллипсисом. Нужно использовать версию с va_list. http://stackoverflow.com/questions/6...iadic-function
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
07.04.2014, 14:50     Перемещение метода класса между секциями #11
При чем тут модификатор доступа, Вы посмотрите как Вы передаете параметры, попробуйте скомпилировать. И когда не получится посмотрите, что значит '...' и при чем там va_list.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,185
Завершенные тесты: 1
07.04.2014, 15:15     Перемещение метода класса между секциями #12
Цитата Сообщение от Tulosba Посмотреть сообщение
нельзя передать переменное число параметров
Я думал, что точки означали "и т.д."
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
07.04.2014, 17:34  [ТС]     Перемещение метода класса между секциями #13
Отнаследовав класс с модификатором private мы получили private доступ
ко всем членам и методам базового класса, которые были public и protected.
В том то и дело что "ко всем членам и методам", а мне нужно переместить только 3 метода!

MrAndrey_ka, а зачем вообще такие сложности?
1. Эллипсис.
2. Сокрытие ранее доступной функции.

Какого рода параметры передаются? Может быть можно заменить массивом?
в принципе можно передать параметры с помощью размера и двух указателей на массивы, но тогда совершенно неудобно будет работать с методами, каждый раз создавать 2 массива и заполнять их
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 17:52     Перемещение метода класса между секциями #14
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
каждый раз создавать 2 массива и заполнять их
Какого рода данные передаются?
И хотелось бы всё же услышать ответ на п.2.
Цитата Сообщение от Tulosba Посмотреть сообщение
2. Сокрытие ранее доступной функции.
Зачем? Опишите ситуацию в целом. Возможно всё дело в архитектурной ошибке.
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,626
07.04.2014, 18:08     Перемещение метода класса между секциями #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
как сделать чтобы метод ABS в классе В, был в секции private а не public?
В общем здесь все довольно просто:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{
public:
    int ABS(int Count, ...);
    int ARS(int Count, ...);
};
 
class B : public A
{
public:
 
private:
    using A::ABS;
};
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 18:16     Перемещение метода класса между секциями #16
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем здесь все довольно просто:
Ларчик просто открывался
Теперь ещё бы лавочку прикрыть:
C++
1
2
B b;
b.A::ABS(0);
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,626
07.04.2014, 19:51     Перемещение метода класса между секциями #17
Tulosba, лавочку можно прикрыть через приватное наследование. Но тогда мы потеряем в приводимости указателей и возможно поменяем смысл, который отражает код. Если же задача позволяет, то вполне решение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
public:
    int ABS(int Count, ...);
    int ARS(int Count, ...);
};
 
class B : private A
{
public:
    using A::ARS;
 
private:
    using A::ABS;
};
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 20:41     Перемещение метода класса между секциями #18
Цитата Сообщение от DrOffset Посмотреть сообщение
Если же задача позволяет, то вполне решение.
А обоснованность такого подхода (сокрытие раннее открытого метода) есть?
DrOffset
6456 / 3830 / 885
Регистрация: 30.01.2014
Сообщений: 6,626
07.04.2014, 20:46     Перемещение метода класса между секциями #19
Цитата Сообщение от Tulosba Посмотреть сообщение
А обоснованность такого подхода
А это ты не у меня спрашивай
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 21:11     Перемещение метода класса между секциями
Еще ссылки по теме:

Вызов метода внутреннего класса методом внешнего класса C++
C++ Шаблон метода класса
C++ Не удается обратиться к свойству класса из метода класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 21:11     Перемещение метода класса между секциями #20
DrOffset, у ТСа я уже спрашивал. Ответа пока нет. Мне с идиологической точки зрения интересно послушать версии.
Yandex
Объявления
07.04.2014, 21:11     Перемещение метода класса между секциями
Ответ Создать тему
Опции темы

Текущее время: 13:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru