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

Как вызвать оператор базового класса в наследнике? - C++

Восстановить пароль Регистрация
 
Hugo_Boss
1 / 1 / 0
Регистрация: 29.01.2013
Сообщений: 46
04.02.2013, 14:59     Как вызвать оператор базового класса в наследнике? #1
Всем привет!

Имеется такая конструкция (мой вопрос - в комментарии к последнему классу):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A {
  A();
  ~A();
  virtual void operator @ (const char* s) {}
};
 
//этот класс использует оператор @ базового класса
class B {
  B();
  ~B();
};
 
class C {
  C();
  ~C();
  virtual void operator @(const char* s) {
    //ряд дополнительных действий
    //здесь хочу вызвать оператор @ базового класса: как это сделать?
  }
};
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 14:59     Как вызвать оператор базового класса в наследнике?
Посмотрите здесь:

C++ Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
C++ Вызов функции родительского класса в наследнике
Вызов метода базового класса из класса-потомка C++
Как используя закрытое наследование использовать 2 объекта базового класса? C++
Ошибка. В классе наследнике все элементы, которые были унаследованы от базового класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 15:01     Как вызвать оператор базового класса в наследнике? #2
Только если убрать virtual и через указатель на A. Возможно есть и другие способы
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
04.02.2013, 15:16     Как вызвать оператор базового класса в наследнике? #3
Цитата Сообщение от Hugo_Boss Посмотреть сообщение
operator @
это что за оператор?

И где тут базовый класс?
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 15:25     Как вызвать оператор базового класса в наследнике? #4
Цитата Сообщение от Schizorb Посмотреть сообщение
это что за оператор?

И где тут базовый класс?
Предполагаю что под operator @ ТС имел ввиду любой оператор, который можно перегрузить. Также, судя по коду и вопросу ТС в качестве базового имеет класс A, но забыл это указать.
Hugo_Boss
1 / 1 / 0
Регистрация: 29.01.2013
Сообщений: 46
04.02.2013, 16:06  [ТС]     Как вызвать оператор базового класса в наследнике? #5
Блин, да, ступил - торопился сюда написать. Вот структура:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A {
  A();
  ~A();
  virtual void operator @ (const char* s) {}
};
 
//этот класс использует оператор @ базового класса
class B : public A {
  B();
  ~B();
};
 
class C : public A {
  C();
  ~C();
  virtual void operator @(const char* s) {
    //ряд дополнительных действий
    //здесь хочу вызвать оператор @ базового класса
  }
};
Извините.

Добавлено через 56 секунд
Цитата Сообщение от Пёс Посмотреть сообщение
Только если убрать virtual и через указатель на A.
Можно, пожалуйста, чуть поподробнее?
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
04.02.2013, 16:10     Как вызвать оператор базового класса в наследнике? #6
А может вызвать явно, указав облать видимости?
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
04.02.2013, 16:19     Как вызвать оператор базового класса в наследнике? #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A {
  A();
  ~A();
  void operator @ (const char* s) {}                      //убираете virtual
};
 
//этот класс использует оператор @ базового класса
class B : public A {
  B();
  ~B();
};
 
class C : public A {
  C();
  ~C();                                                              
  void operator @(const char* s) {                         //здесь тоже
    //ряд дополнительных действий
    //здесь хочу вызвать оператор @ базового класса
    A* pointerA = this;                    //создаём указатель на базовый класс, и помещаем туда адрес объекта класса C
    pointerA->operator @();             //вызываем operator @, который принадлежит базовому классу. (если бы стоял virtual, то вызвался оператор наследника)
  }
Добавлено через 4 минуты
Кстати!!! Вспомнил ещё кое что!

если не ошибаюсь, то сработает такая запись:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A {
  A();
  ~A();
  virtual void operator @ (const char* s) {}
};
 
//этот класс использует оператор @ базового класса
class B : public A {
  B();
  ~B();
};
 
class C : public A {
  C();
  ~C();
  virtual void operator @(const char* s) {
    //ряд дополнительных действий
    //здесь хочу вызвать оператор @ базового класса
    this->A::operator @(s);
  }
};
Hugo_Boss
1 / 1 / 0
Регистрация: 29.01.2013
Сообщений: 46
04.02.2013, 16:27  [ТС]     Как вызвать оператор базового класса в наследнике? #8
Пёс, Спасибо! Я в этом же направлении думал (1 вариант). Про 2ой знал, но у меня не проходило, потому и написал сюда на форум. Сейчас вроде получилось, хотя ничего не менял. Как всегда, мистика )))
Хотел тебе плюсануть, но что-то не нашел кнопочки нужной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 16:39     Как вызвать оператор базового класса в наследнике?
Еще ссылки по теме:

C++ Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
C++ Вызвать из базового класса методы потомков
Как узнать тип производного класса в функции базового C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.02.2013, 16:39     Как вызвать оператор базового класса в наследнике? #9
А в чём проблема? Так же, как любой метод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
 
class A
{
public:
    A()
    {
    }
    
    virtual ~A()
    {
    }
    
    virtual void operator+(const char* s)
    {
        std::cout << "A::operator+(" << s << ")" << std::endl;
    }
};
 
//этот класс использует оператор @ базового класса
class B : public A
{
public:
    B()
    {
    }
    
    virtual ~B()
    {
    }
};
 
class C : public A
{
public:
    C()
    {
    }
    
    virtual ~C()
    {
    }
    
    virtual void operator+(const char* s)
    {
        std::cout << "C::operator+(" << s << ")" << std::endl;
        
        A::operator+(s);
    }
};
 
int main()
{
    A *a1 = new A();
    A *a2 = new B();
    A *a3 = new C();
    
    *a1 + "hello";
    std::cout << "--------------------" << std::endl;
    *a2 + "hello";
    std::cout << "--------------------" << std::endl;
    *a3 + "hello";
    
    delete a1;
    delete a2;
    delete a3;
    
    return 0;
}
http://liveworkspace.org/code/LoqS$6
Yandex
Объявления
04.02.2013, 16:39     Как вызвать оператор базового класса в наследнике?
Ответ Создать тему
Опции темы

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