Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2015, 23:06   #1
MrQuestion
Пользователь
 
Регистрация: 16.08.2015
Сообщений: 40
По умолчанию Компилятор не признаёт наследника С++

Код:
#include <iostream>
using namespace std;

typedef unsigned int usi;
class Account 
{
      protected:
                unsigned int number;
                float balance;
      public:
             virtual void deposit() = 0;
             virtual void transaction() = 0;
};
class Savings : public Account 
{
      protected:
                float percents();
      public:
             Savings(usi n = 0): number(n)
      {
                 cout << "Áàëàíñ 
ñáåðåãàòåëüíîãî 
ñ÷åòà ¹" << number << " = " << balance << endl;
      }
      virtual ~Savings() {}
};
class Chekings : public Account 
{
      protected:
                float percents();
      public:
             Chekings(usi n = 0): number(n)
      {
                 cout << "Áàëàíñ ÷å
  êîâîãî ñ÷åòà ¹"
  << number << " = " << balance << endl;
      }
      virtual ~Chekings(){}
};
                             
int main()
{
    
    system("pause");
    return 0:
}
Здравствуйте! Извиняюсь за иероглифы.
Проблема в строках
public:
Savings(usi n = 0): number(n)
Компилятор пишет, что в классе Savings нет полей с именем number, хотя Savings наследует класс Account. В чём, собственно, проблема?Спасибо

Последний раз редактировалось Stilet; 06.11.2015 в 10:01.
MrQuestion вне форума Ответить с цитированием
Старый 06.11.2015, 00:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,725
По умолчанию

Когда компилятор просматривает список инициализации, то конструктор базового класса еще не вызван и фактически number'а еще нет. Как вариант создайте в базовом классе конструктор с параметром и инициализацией number, а в списке инициализации его и вызывайте.
p51x вне форума Ответить с цитированием
Старый 06.11.2015, 16:05   #3
MrQuestion
Пользователь
 
Регистрация: 16.08.2015
Сообщений: 40
По умолчанию

Создал такой конструктор с инициализацией number
Код:
public:
             Account(usi n = 0, float b = 0.0):number(n),balance(b)
             {}
Savings по прежнему говорит, что поля number у него нет. Про список инициализации не со всем понял.
Цитата:
а в списке инициализации его и вызывайте.
А вот этот отрывок что то невообразимое =). Я явно чего то не понимаю. Очень хочется пояснений или какой нибудь ссылки на эти списки инициализаций.
Спасибо.
MrQuestion вне форума Ответить с цитированием
Старый 06.11.2015, 16:20   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

вместо
Код:
Chekings(usi n = 0): number(n)
надо
Код:
Chekings(usi n = 0): Account(n)
как правильно отмечено из списка инициализации (все что следует за двоеточием в конструкторе) доступа к полям предка нет

Последний раз редактировалось f.hump; 06.11.2015 в 16:28.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание наследника TForm -Jack- C++ Builder 3 22.04.2015 18:22
Класс без наследника KuckaMAXHATKA PHP 2 17.11.2012 18:14
Полиморфизм. Идентификация класса-наследника Сtrl Общие вопросы C/C++ 13 19.07.2011 22:42
[B]Написать наследника компонента. Delphi.[/B] OnCreate Помощь студентам 0 19.10.2010 22:44
Создание наследника ImmortalAlexSan Общие вопросы Delphi 4 29.04.2010 14:19