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

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

Войти
Регистрация
Восстановить пароль
 
Октавиан_Август
2 / 2 / 0
Регистрация: 14.08.2010
Сообщений: 41
#1

Как применить функцию в потомке - C++

04.05.2014, 16:22. Просмотров 151. Ответов 3
Метки нет (Все метки)

Есть 3 класса: A предок B, B предок C. У А есть функция foo, к которой хочет обратиться метод blah функции С. Помимо этого, blah хочет вызвать функцию test, которая имеет единственный параметр -- объект класса А. Подскажите, как должен выглядеть blah. Виртуального blah в В нет.

P.S. Класс В как будто ни при чём, но избавиться от него нельзя. Никак.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как применить функцию в потомке (C++):

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

Применить функцию к каждому столбцу матрицы - C++
записать функцию P,которая в заданном одномерном массиве x элементов типа float, приравнивает нулю все элементы Xj,для которых...

Разработать (и применить) для классов A и B дружественную функцию, позволяющую определять текущую дату и время - C++
Класс А определяет текущее системное время на компьютере Класс В определяет дату, изменение которой происходит в 24 часа системного...

Как применить strcat? - C++
char* strcat(char *s1, const char *s2) зачем нужны * перед strcat, s1 и s2? И как можно эту функцию применить?

Рекурсивная функция. Как применить - C++
Для заданного одномерного массива X из N элементов проверить, что для всех элементов массива выполняется условие –10<x3i<20. Рекурсивную...

Как применить динамическую память? - C++
Помогите пожайлуста!!!!! Как в слейдущей программе применить динамическую память????? #include <stdio.h> #include<conio.h> #define N...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
04.05.2014, 16:47 #2
Если я Вас верно понял, то:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A {
public: 
    void Foo();
};
 
class B : public A {
}
 
void Test(const A &a) {
}
 
class C : public B {
    void Blah() {
     Test(*this); // Test(new A)? 
  }
}
Из Вашего сообщения не следует каких-либо сведений о том, определены ли в иерарахии наследования какие-либо вирутальные методы, где именно объявлена функция Test, по ссылке, по значению или по указателю Test "имеет единственный параметр -- объект класса А", какой именно объект предполагается туда подавать (свежесозданный или приведенный - наследник?) В общем случае Blah - должен выглядеть как метод как и любой другой метод класса.
Октавиан_Август
2 / 2 / 0
Регистрация: 14.08.2010
Сообщений: 41
04.05.2014, 17:12  [ТС] #3
Да, а как в blah использовать Foo?
Функция test -- test(const &A). Никаких виртуальных методов нет, это вообще говоря метод другого класса (не А, не Б и не С).
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
04.05.2014, 17:21 #4
C++
1
2
3
4
void C::Blah() {
   Foo();  // Может быть и простой вызов.
   A::Foo(); //Если необходимо явно выразить, что нужна именно функция из A.
}
Добавлено через 4 минуты
Вот вам небольшой пример, иллюстрирующий ситуацию когда необходимо явно указывать свои намерения:

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
#include <iostream>
using namespace std;
 
 
class A {
public:
  void Foo() {
    cout << "A::Foo()" << endl;
  }
};
 
 
class B : public A {
public:
  void Foo() {                  // Foo from A is hidden
    cout << "B::Foo()" << endl;
  }
 
  void Test() {
    cout << "B::Test()" << endl;
    Foo();
    A::Foo();
  }
 
};
 
int main() {
  cout << "Test started" << endl;
  B b;
  b.Test();
  cout << "Test finished" << endl;
  return 0;
}
Полученный вывод:
Test started
B::Test()
B::Foo()
A::Foo()
Test finished
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 17:21
Привет! Вот еще темы с ответами:

Как применить шаблоны к данным задачам? - C++
Есть 7 заданий с использование шаблонов. Объясните пожалуйста в чем шаблонность классов( см. 6 задание) в каждом из заданий. Еще...

Как применить матрицу поворота к изображению? - C++
Всем привет! Будьте добры объясните как применять матрицу поворота к массиву. Массив, конечно, одномерный: rgbQuad* bmp; ...

Как применить new, точнее для чего это нужно? - C++
Выполняю упражнение с книги. Условие можно увидеть на скрине ниже представлен код. Возникли следующие вопросы: 1. как применить new,...

Перегрузка операций (Создать класс вещественных чисел (double); определить оператор +, как функцию-элемент и – как дружественную функцию) - C++
помогите решить пожалуйста Задание 2. Бинарная операция Создать класс вещественных чисел (double).. Определить оператор +, как...


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

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

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