|
|
|
| Вопрос в следующем:
Есть базовый класс, с переменными типа bool.
Наследующий класс имеет методы, использующие значения этих переменных.
Создается объект базового класса, определяется значение переменных.
Создается объект наследующего класса.
Однако, методы(наслед. класса) не работают.
Как мне кажется, проблема в том, что переменные, используемые непосредственно в методе,
не те что инициализировал конструктор базового класса.
Собственно вопрос - как "привязать" эти переменные(объекта базового класса)
к методу насл. класса?
Помогите, плиз)
Или подскажите, где поискать ответ) | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 14:36)
| | А спецификаторы доступа у методов какие (public, private, protected)? Если спецификатор доступа private (или вообще не указан, что эквивалентно private) - они не будут доступны никому, в том числе и наследнику. Если спецификатор доступа public, методы будут доступны всем. Если спецификатор доступа protected, методы будут доступны только наследникам (внешнему коду они не будут доступны). | |
|
|
|
|
|
|
|
для: cheops
(06.11.2011 в 14:57)
| | У методов - public, у переменных - protected. Но, как мне кажется, проблема не в этом.
Программа компилируется нормально, методы работают, но не правильно.
вот пример:
class Base
{
protected:
bool a;
public:
Base() : a(true){}
};
class Date : protected Base
{
public:
void print();
};
void Date::print()
{
cout<<"Начало";
if(a==true)
cout<<"Работает";
if(a==false)
cout<<"Работает2"; // для проверки)
соut<<"Конец";
}
//собственно программа
Base b;
Date c;
void main()
{
c.print();
}
|
На выходе получаем:
НачалоКонец
Переменная, вообще, не имеет значения. | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 15:47)
| | Да, и тема немного не соответствует проблеме)
Не получается обратиться к переменным базового класса. | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 16:11)
| | Перепроверил:
На выходе - Начало Работает2 Конец
Получается вооl a = false, а должен быть true. | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 16:19)
| | А чем компилируете? | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 15:47)
| | А вы где этот пример компилируете? У меня он, после небольшого дополнения (стандартная библиотека, форматирование исправление последнего cout) в Visual Studio выдает
| |
|
|
|
|
|
|
|
для: cheops
(06.11.2011 в 16:24)
| | Хм...
Проверил сам пример, все работает нормально))
Но проблема в том, что в программе которую я пишу используется этот же принцип. И она не работает как надо.
Видно я просто где-то накасячил) Буду искать где))
Спасибо) | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 16:46)
| | Нашел где проблема.
Я инициализировал переменные в отдельном методе базового класса.
Засунул этот метод в конструктор, и все - ок)
Но у меня возник вопрос.
Если я создаю несколько объектов базового класса. Как сделать, чтобы метод насл.класса обращался к переменным этих объектов? | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 17:43)
| | Не очень понятно в чем сложность? К переменной или методы базового класса (в том числе к методу, который был закрыт перегруженным методом) можно обратиться при помощи префикса Base:: Или речь идет о чем-то другом? | |
|
|
|
|
|
|
|
для: cheops
(06.11.2011 в 18:24)
| | Немного о другом)
есть три объекта класса Base - a, b, c.
есть один объект класса Date(наследующего) d.
Как сделать чтоб методы d использовали значение переменных a, b или с? | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 20:00)
| | А объекты a, b и с - это разные объекты? Тогда никак, это просто другой участок памяти, вы можете объект d привести к базовому типу Base, и сослаться на этот приведенный объект при помощи ссылки или указателя - в этом случае вам удастся сделать так, чтобы указатель и переменная оперировали одними и теми же переменными. | |
|
|
|
|
|
|
|
для: cheops
(06.11.2011 в 21:52)
| | Ясно)
Буду учить указатели. Спасибо за помощь) | |
|
|
|
|
|
|
|
для: DarKo
(06.11.2011 в 22:47)
| | >Буду учить указатели. Спасибо за помощь)
Не ради поучения, а пользы для: указатели лучше выучить как "отче наш", долбать их до полного понимания и автоматизма, иначе смысла нет C++ изучать. | |
|
|
|