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

Можно ли из базового класса обратится к виртуальному методу производного? - C++

Восстановить пароль Регистрация
 
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
10.05.2014, 22:31     Можно ли из базового класса обратится к виртуальному методу производного? #1
Можно ли из базового класса обратится к виртуальному методу производного? И если да то как (на примере класса A).
Polym.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include "Strings.h"
#include "Digits.h"
#include "Letters.h"
#include <cstring>
 
using namespace std;
 
void main()
{
    string Ex="wasdf";
    Strings A(Ex);
    
}
Strings.h
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
#ifndef STRINGS_H
#define STRINGS_H
#include "stdafx.h"
#include <string>
 
using namespace std;
 
class Strings
{
private:
    string S;
public:
    Strings()
    {
    }
    Strings(string S2)
    {
        S=S2;
    }
    virtual int Len();
    virtual void Processing();
};
 
#endif STRINGS_H
Letters.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <string>
#include "Strings.h"
#include <iostream>
 
class Letters : Strings
{
private:
    string L;
public:
    Letters()
    {
    }
    Letters(string L1)
    {
        L=L1;
    }
    virtual int Length();
    virtual void Reverse();
};
Digits.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <string>
#include "Strings.h"
#include <iostream>
 
class Digits : Strings
{
private:
    string D;
public:
    Digits()
    {
    }
    Digits(string D1)
    {
        D=D1;
    }
    virtual int Len();
    virtual void Increasing();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 22:31     Можно ли из базового класса обратится к виртуальному методу производного?
Посмотрите здесь:

C++ Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса
C++ Вызов метода производного класса через обращение к методу базового класса
Вызов виртуального метода базового класса из указателя производного C++
Вызов методов производного класса из базового C++
Конструкторы базового и производного класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4302 / 3723 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
10.05.2014, 22:40     Можно ли из базового класса обратится к виртуальному методу производного? #2
По имени. Как ещё? Вызван будет метод соответствующий объекту.
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
10.05.2014, 22:40  [ТС]     Можно ли из базового класса обратится к виртуальному методу производного? #3
Так и не услышал ответа
nmcf
4302 / 3723 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
10.05.2014, 22:45     Можно ли из базового класса обратится к виртуальному методу производного? #4
Как и я конкретного вопроса. В каком месте и что хочешь вызвать? Проблема-то в чём?
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
10.05.2014, 22:48  [ТС]     Можно ли из базового класса обратится к виртуальному методу производного? #5
У меня есть объект A типа Strings. Как из него обратится к методу, например, класса Letters Reverse?
nmcf
4302 / 3723 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
10.05.2014, 22:50     Можно ли из базового класса обратится к виртуальному методу производного? #6
Из Strings можно вызвать только то, что объявлено в нём, но если функция переопределена, то вызван будет тот вариант, который соответствует вызывающему объекту.

Добавлено через 1 минуту
Reverse в Strings ты не вызовешь, так как он там не объявлен.
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
10.05.2014, 22:51  [ТС]     Можно ли из базового класса обратится к виртуальному методу производного? #7
..Ок, спасибо
Melg
416 / 152 / 62
Регистрация: 23.09.2013
Сообщений: 306
10.05.2014, 22:54     Можно ли из базового класса обратится к виртуальному методу производного? #8
Вот пример того как вызов VirtualMethod-а в базовом классе зависимости от того какой объект на самом деле был создан влияет на реализацию.

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
#include <iostream>
 
class Base {
public:
  virtual ~Base(){}
 
  void TestFoo() {
    std::cout << "TestFoo of base class called" << std::endl;
    VirtualMethod();
  }
protected:
  virtual void VirtualMethod() {
    std::cout << "VirtualMethod of base class called" << std::endl;
  }
};
 
class Derived : public Base {
protected:
  void VirtualMethod() {
    std::cout << "VirtualMethod of dreived class overload called" <<std::endl;
  }
};
 
 
int main(int argc, char *argv[]) {
  Base *base = new Base();
  base->TestFoo();
 
  Base *derived = new Derived();
  derived->TestFoo();
 
  delete base;
  delete derived;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 23:00     Можно ли из базового класса обратится к виртуальному методу производного?
Еще ссылки по теме:

Как узнать тип производного класса в функции базового C++
Указатель на объект базового класса и адрес объекта производного класса C++
Наследование: почему вызывается метод базового класса, а не производного? C++

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

Или воспользуйтесь поиском по форуму:
nmcf
4302 / 3723 / 1255
Регистрация: 14.04.2014
Сообщений: 14,579
10.05.2014, 23:00     Можно ли из базового класса обратится к виртуальному методу производного? #9
Он хочет вызывать функции виртуальные, но не объявленные в базовом классе. Они дальше виртуальные.
Yandex
Объявления
10.05.2014, 23:00     Можно ли из базового класса обратится к виртуальному методу производного?
Ответ Создать тему
Опции темы

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