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

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

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

Доступ к методам, массив указателей - C++

12.03.2013, 01:30. Просмотров 441. Ответов 12
Метки нет (Все метки)

Можно ли как нибудь получить доступ к методу Positive в данном случае:

C++
1
2
3
4
StrL ** testStr3;
testStr3= new StrL * [3];
testStr[0] = new StrLBit("000110101");
bool tmp = testStr[0]->Positive();
если StrL - предок, StrLBit - потомок, Positive - метод класса StrLBit ?
При таком коде компилятор не видит метод.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 01:30     Доступ к методам, массив указателей
Посмотрите здесь:

Доступ к методам производного класса - C++
Есть базовый класс CJobGeneral. В нём описано несколько методов. Есть унаследованный от него CJobCitomir с рядом своих методов. Есть...

Класс - друг. Доступ к полям и методам - C++
Есть два класса: MainWindow и LBM_computation, в одном из них происходят вычисления. Класс MainWindow - для визуализации. Надо сделать так,...

Доступ к методам класса без создания объекта - C++
Почему доступны методы foo() и bar() класса А, если нет ни одного объекта это класса? #include <iostream> class A { int...

Как в std::vector получить доступ к методам элементов? - C++
Здравствуйте. Нужно что-то вроде этого: #include <iostream> #include <vector> #include "box.h" using namespace std; int...

Callback std::function + доступ к приватным полям класса методам которые не есть их полями - C++
Проблема, товарищи. В прикрепленном архиве 3 файла, из которых состоит моя программа: **main.cpp; prototypes.h; realization.cpp** 1....

Косвенное обращение к методам. Освобождение памяти,выделенной под двумерный динамический массив - C++
Вопрос 1. В задании необходимо проиллюстрировать косвенный способ обращения к методам. Искал в интернете. Нашел : Array *s, obj(n,...

Массив указателей - C++
Помогите, пожалуйста, разобраться в чем ошибка и обьясните, что тут не так. Спасибо. (программа запускается, но зависает) #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.03.2013, 02:36     Доступ к методам, массив указателей #2
Объявить Positive() в StrL виртуальным?
UnknownSmith
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 10
12.03.2013, 02:51  [ТС]     Доступ к методам, массив указателей #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Объявить Positive() в StrL виртуальным?
Не помогает(
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
12.03.2013, 03:34     Доступ к методам, массив указателей #4
этот метод в классе-предке вообще присутствует?
alsav22 говорил именно о методе в классе-предке, его надо сделать виртуальным.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.03.2013, 08:50     Доступ к методам, массив указателей #5
Объявление класса StrL покажите.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.03.2013, 11:47     Доступ к методам, массив указателей #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Объявить Positive() в StrL виртуальным?
А какая разница с точки зрения нахождения компилятором метода виртуальный он или нет? Если он объявлен у предка и не является private - должен быть доступен у потомка в функциях-членах. А если объявлен как public - то и вообще везде.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
12.03.2013, 11:56     Доступ к методам, массив указателей #7
Цитата Сообщение от Tulosba Посмотреть сообщение
А какая разница с точки зрения нахождения компилятором метода виртуальный он или нет?
указатель объявлен типа StrL *
То, что мы этим указателем указываем на сконструированного потомка StrL, а не сам StrL, (new StrLBit("000110101"); )
компилятор никаким образом не узнает и будет вызывать методы для StrL
следовательно переопределённые методы должны быть виртуальными, чтобы этого не происходило.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.03.2013, 11:56     Доступ к методам, массив указателей #8
Цитата Сообщение от Tulosba Посмотреть сообщение
А какая разница с точки зрения нахождения компилятором метода виртуальный он или нет?
Разница в том, что если метод не виртуальный, то комилятор определяет принадлежность метода по типу указателя (в данном случае указатель типа предок), а если виртуальный, то по типу объекта, с которым указатель связан (в данном случае - наследник). ТС хочет вызвать метод наследника.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.03.2013, 12:06     Доступ к методам, массив указателей #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
следовательно переопределённые методы должны быть виртуальными, чтобы этого не происходило.
Тс пишет:
Цитата Сообщение от UnknownSmith Посмотреть сообщение
компилятор не видит метод.
причем тут виртуальность? пример

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
ТС хочет вызвать метод наследника.
Так надо и формулировать правильно тогда. Потому, что
Цитата Сообщение от UnknownSmith Посмотреть сообщение
компилятор не видит метод
Я понимаю как "ошибка при компиляции". Если собралось - значит компилятор видит, а тот или не тот, это уже следующий вопрос.
UnknownSmith
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 10
12.03.2013, 18:49  [ТС]     Доступ к методам, массив указателей #10
При объявлении в предке одноименного виртуального метода работает)

А других вариантов не существует? Придется так объявлять еще несколько методов и операторов 2х предков
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.03.2013, 18:56     Доступ к методам, массив указателей #11
Цитата Сообщение от UnknownSmith Посмотреть сообщение
А других вариантов не существует?
Другой вариант чтобы вызвать метод наследника через указатель на предка? Ну, можете реализовать свою таблицу виртуальных функций. Но зачем?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
12.03.2013, 22:41     Доступ к методам, массив указателей #12
Цитата Сообщение от Tulosba Посмотреть сообщение
Сообщение от Kuzia domovenok
следовательно переопределённые методы должны быть виртуальными, чтобы этого не происходило.
Тс пишет:
Сообщение от UnknownSmith
компилятор не видит метод.
причем тут виртуальность?
Просто я телепат и вижу, что происходит у автора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2013, 23:28     Доступ к методам, массив указателей
Еще ссылки по теме:

Массив указателей - C++
Есть ли аналог нижеуказанной строки в си? Создается массив указателей, необходим для работы с функциями работы с виртуальной памятью...

массив указателей - C++
int abc=0; for (int i=0;i<resultFile.count();i++){ for (int j=0;j<_H400_H419.count();j++){ ...

Массив указателей - C++
Вот,продолжаю изучать тему массивы указателей. В качестве примера, почти уже на последних страницах приводится задачка с использованием...

Массив указателей. - C++
Помогите разобраться почему мне компилятор говорит "implicit declaration of function" на вот это: int parser(char *data, char *stack)...

массив указателей - C++
Есть массив указателей: char* arStr = {"BAC","ACB","QQQ", "SDF", "ABC"}; возможно ли, зная только адрес первого элемента массива...


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

Или воспользуйтесь поиском по форуму:
Tulosba
12.03.2013, 23:28     Доступ к методам, массив указателей
  #13

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Просто я телепат и вижу, что происходит у автора.
Такими темпами скоро будете давать ответы до публикации вопроса.

Yandex
Объявления
12.03.2013, 23:28     Доступ к методам, массив указателей
Ответ Создать тему
Опции темы

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