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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
#1

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

10.05.2014, 22:31. Просмотров 286. Ответов 8
Метки нет (Все метки)

Можно ли из базового класса обратится к виртуальному методу производного? И если да то как (на примере класса 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();
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли из базового класса обратится к виртуальному методу производного? (C++):

Вызов метода производного класса через обращение к методу базового класса - C++
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp, то всё нормально. Если же создавать в...

Создание указателя типа базового класса на экземпляр производного класса - C++
Добрый день! Иногда видел коды, где создавался указатель типа базового класса на объект класса - наследника, для чего это может применяться?

Указатель на объект базового класса и адрес объекта производного класса - C++
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; } ~Class1() {delete j;}

Определить обработчик исключений на преобразование указателя базового класса на указатель производного класса - C++
Класс В является производным от класса А. Определить обработчик исключительной ситуации на преобразование указателя базового класса А на...

Вызов объектом базового класса функцию из производного класса! - C++
Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого значения в производном классе. Вот...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

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

Добавлено через 1 минуту
Reverse в Strings ты не вызовешь, так как он там не объявлен.
0
nostalex
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 56
10.05.2014, 22:51  [ТС] #7
..Ок, спасибо
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
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;
}
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
10.05.2014, 23:00 #9
Он хочет вызывать функции виртуальные, но не объявленные в базовом классе. Они дальше виртуальные.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 23:00
Привет! Вот еще темы с ответами:

Конструкторы базового и производного класса - C++
class first { public: first(int a):first(a){} void Setfirst(int a){first=a;} int Getfirst(){return first;} private: ...

как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса? - C++
я хотел так, но программа просто падает void Student::add(Base** head) { cout &lt;&lt; &quot;I here&quot; &lt;&lt; endl; this-&gt;setName(); //все...

Отрабатывает оператор базового, а не производного класса - C++
Здравствуйте! Собственно, вопрос в следующем. Я перегрузил оператор потокового вывода для базового и для производного класса. При выводе...

Вызов методов производного класса из базового - C++
Возможно ли, чтобы class A { void f1() { f2();//если вызвано из B, то вызывается B::f2(), а не A::f2() } void f2(){} }


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.05.2014, 23:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru