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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2011, 17:36   #1
kukumumu
 
Регистрация: 28.12.2010
Сообщений: 7
Печаль C++ "невозможно обратиться к private член" хотя он protected

У меня VC++ Express 2008
делаю упражнение на тему "Наследование"
суть программы: сделать класс-наследник сделанного ранее класса Sterling (фунты шиллинги пенсы) и класса fraction (дроби) - класс фунтов стерлингов пенсов + фартинги (1/4 пенса)
в программе пока куча ошибок. разбираюсь.интересует ошибка: error C2248: fraction::numerator: невозможно обратиться к private член, объявленному в классе "fraction" см. объявление 'fraction::numerator'
см. объявление 'fraction'
не могу понять, почему "невозможно обратиться к private член", когда он объявлен как protected и должен быть виден классу-наследнику.
вот, часть листинга:

class fraction
{
protected:
int numerator, denominator;
public:
.....................
};
class sterling
{
protected:
long pounds;
int shillings,pences;
public:
...............
};
class sterfrac: private sterling, private fraction
{
private:
fraction farting;
public:

sterfrac():sterling(),farting()
{}
sterfrac(long f, int s, int p):sterling(f,s,p),farting(0,0)
{}
sterfrac(long f, int s, int p,fraction fr):sterling(f,s,p),farting(fr)
{}
sterfrac(sterling s, fraction f):sterling(s),fraction(f)
{}тут сначала пробовала фунты стерлинги и пенсы инициализировать отдельно, но из-за этой же ошибки пришлось переделать, компилятор, вроде, "съел"
sterfrac(double decPounds) //вот он, тот злосчастный метод
{
//оставляем 2 знака после запятой (вычисляем сколько сотых)
double afterPoint = (decPounds-static_cast<int>(decPounds))*1000;
int iAfterPoint = afterPoint;
if (iAfterPoint%10>5) //округляем в большую или меньшую сторону
{
iAfterPoint -= iAfterPoint%10;
iAfterPoint +=10;
}
else
iAfterPoint -= iAfterPoint%10;
iAfterPoint /= 10; //убираем лишний ноль. теперь и iAfterpoint - это число сотых


farting.numerator = afterPoint/10*192; //вот она, эта злосчастная строка!
farting.denominator = 8;
pences = farting.Part(farting.numerator,fart ing.denominator);
farting.lowTerms();
shillings = pences/12;
pences %= 12;
pounds = decPounds;

}
kukumumu вне форума Ответить с цитированием
Старый 07.10.2011, 18:49   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Потому что private наследование, а не public.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.10.2011, 19:48   #3
kukumumu
 
Регистрация: 28.12.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Потому что private наследование, а не public.
А при чем здесь это? private или public наследование влияет на то, можно ли будет из объектов класса-ребенка получать доступ к public членам класса-родителя.
на всякий случай, поменяла - естественно, не прокатило.
kukumumu вне форума Ответить с цитированием
Старый 08.10.2011, 11:30   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
влияет на то, можно ли будет из объектов класса-ребенка получать доступ к public членам класса-родителя.
Загляните еще раз в книжку
p51x вне форума Ответить с цитированием
Старый 25.12.2011, 15:34   #5
kukumumu
 
Регистрация: 28.12.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Загляните еще раз в книжку
давно уже было. но я разобралась. заявляю, дело было не в том, что наследование не public
а в том, что farting- объект другого класса, хоть и родителя. а protected делает видными методы для объектов класса-потомка.
так что, видимо, в книжку надо заглянуть вам тоже.
kukumumu вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "Член группы не найден" в Webbrowser Bright-rider Работа с сетью в Delphi 3 11.04.2011 19:43
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
обратиться к функции через " switch case " B@R@B@$HK@ Общие вопросы C/C++ 4 09.06.2009 19:15
Выводит ошибку "Unclarified identifier", хотя недавно запускалась в другой программе Alex Cones Общие вопросы Delphi 2 20.04.2009 21:31
Webbrowser и "Невозможно отобразить страницу" celovec Работа с сетью в Delphi 1 06.07.2007 13:45