Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с защищёнными членами 
:(
    Опции темы
svan
Дата 21.11.2005, 20:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У меня вот такой вопрос. Ни в одной книжке этого не было написано , сегодня только сам выяснил , что внутри класса нельзя присваивать значения переменным. Меня это почему-то обескуражило , а как же тогда работать с защищёнными членами класса? Почему им нельзя присваивать значения?
Вот например в таком классе
Код

class Student
{
public:
float grade()
{
return gpa;
}
float grade(float newGPA)
{
float oldGPA = gpa;
if (newGPA > 0 && newGPA <= 5.0)
{
gpa = newGPA;
}
return oldGPA;
просто необходимо их проинициализировать , почему этого нельз сделать?

  Вверх
Earnest
Дата 21.11.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Можно внутри класса присваивать значения переменным, только для этого их надо в классе объявить smile. Кто такой gpa? И закрывающей скобки у тебя не хватает... И причем тут защищенные члены - где они?
Приведи полный код, а также ошибку компилятора, а то с телепатией у меня сегдодня плохо...


--------------------
...
PM   Вверх
Guest
Дата 21.11.2005, 21:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Блин , да , что-то я тормознул, забыл вторую часть класса добавить. Выкладываю полный код.

Код

#include <iostream.h>
class Student
{
public:
float grade()
{
return gpa;
}
float grade(float newGPA)
{
float oldGPA = gpa;
if (newGPA > 0 && newGPA <= 5.0)
{
gpa = newGPA;
return gpa;
}
return oldGPA;
}
protected:
int semesterHours; 
float gpa=5.0;   // Здесь компилятор выдаёт ошибку
};
int main() {
float newGPA;
cin >> newGPA;
Student b;
float a = b.grade(newGPA);
cout << a;
return 0;
}

Ошибки такие: illegal pure syntax, must be '= 0'
'gpa' : pure specifier can only be specified for functions
Так можно их инициализировать или нет?
  Вверх
BreakPointMAN
Дата 21.11.2005, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Про конструкторы что-нибудь слышал?
Добавлено @ 22:31
Код

#include <iostream.h>
class Student
   {
    public:
       // инициализируем в конструкторе
       Student()
           {
             semesterHours=0;
             gpa=5.0; 
           }

       float grade()
          {
            return gpa;
          }
      float grade(float newGPA)
          {
           float oldGPA = gpa;
           if (newGPA > 0 && newGPA <= 5.0)
              {
               gpa = newGPA;
               return gpa;
              }
           return oldGPA;
         }
   protected:
      int semesterHours; 
      float gpa;   //  не надо тут писать "=5.0;"
};

int main() {
   float newGPA;
   cin >> newGPA;
   Student b;
   float a = b.grade(newGPA);
   cout << a;
   return 0;
}


Это сообщение отредактировал(а) BreakPointMAN - 21.11.2005, 22:32


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
nikitao
Дата 21.11.2005, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



В ошибке все по русски написано: smile
Цитата
error C2864: 'gpa' : only const static integral data members can be initialized inside a class or struct

Честно говоря не зная английского можно понять,что так можно инициализировать только статические константы класса.

ЗЫ У меня VC++ 7.0


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Guest
Дата 21.11.2005, 23:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











nikitao , я написал какие у меня были ошибки , у меня VC++ 6.0
Статические константы - это static const или просто static?
  Вверх
Neitron
Дата 22.11.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



1. А зачем тебе защищенные челы класса, вместо privat?
2. Во всех книжках это каких? Кто автор? Страуструп?


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
nikitao
Дата 22.11.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



static const


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1317 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.