Концепция ООП
От: ms  
Дата: 25.09.03 10:20
Оценка:
class a
{
public:
    int k;
    int s(int n);
    void s(char ch);
};
int a::s(int n)
{
    return 0;
}
void a::s(char ch)
{
}

class b : public a
{
public:
    int s(int n, char ch);

};
int b::s(int n, char ch)
{
    k = 0;
    return 0;
}

void main(void)
{
    b u;
    u.s(1);
    u.k;
}


Объясните мне пожалуйста почему это не работает. Ведь class b это расширение class a. Ан нет не хотит!!!

Исправлена подсветка синтаксиса. -- ПК.
Re: Концепция ООП
От: MaximE Великобритания  
Дата: 25.09.03 10:24
Оценка: 1 (1)
Здравствуйте, ms, Вы писали:

ms>class a
ms>{
ms>public:
ms>    int k;
ms>    int s(int n);
ms>    void s(char ch);
ms>};
ms>int a::s(int n)
ms>{
ms>    return 0;
ms>}
ms>void a::s(char ch)
ms>{
ms>}

ms>class b : public a
ms>{
ms>public:
    using a::s; // добавить
ms>    int s(int n, char ch);

ms>};
ms>int b::s(int n, char ch)
ms>{
ms>    k = 0;
ms>    return 0;
ms>}

ms>void main(void)
ms>{
ms>    b u;
ms>    u.s(1);
ms>    u.k;
ms>}


ms>Объясните мне пожалуйста почему это не работает. Ведь class b это расширение class a. Ан нет не хотит!!!


Функции производного класса скрывают одноименные функции базового. Явление называется name hiding.
Re: Концепция ООП
От: Олег Куликов США  
Дата: 25.09.03 10:27
Оценка:
Здравствуйте, ms, Вы писали:

ms> u.s(1);


Надо


u.a::s(1);
И немедленно выпил...
Re: Концепция ООП
От: Bell Россия  
Дата: 25.09.03 10:29
Оценка:
Здравствуйте, ms, Вы писали:



ms>Объясните мне пожалуйста почему это не работает. Ведь class b это расширение class a. Ан нет не хотит!!!


потому что b::s скрывает обе функции s из класса a.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Концепция ООП
От: Bell Россия  
Дата: 25.09.03 10:32
Оценка:
Здравствуйте, Bell, Вы писали:

Надо так:


class a
{
public:
int k;
int s(int n);
void s(char ch);
};
int a::s(int n)
{
return 0;
}
void a::s(char ch)
{
}

class b : public a
{
public:
using a::s;
int s(int n, char ch);

};
int b::s(int n, char ch)
{
k = 0;
return 0;
}

int main(void)
{
b u;
u.s(1);
u.s('c');
}
Любите книгу — источник знаний (с) М.Горький
Re: Концепция ООП
От: ms  
Дата: 25.09.03 10:57
Оценка:
Спасибо ребята что откликнулись!
Но мне всё-равно почему-то кажется, что так всё-таки не правильно, надо было бы разрешить такой доступ, чтобы не было разночтения с теорией ООП! Видать Страуструппу так удобнее!
Re[2]: Концепция ООП
От: Аноним  
Дата: 25.09.03 11:01
Оценка:
Здравствуйте, ms, Вы писали:

ms>Но мне всё-равно почему-то кажется, что так всё-таки не правильно, надо было бы разрешить такой доступ, чтобы не было разночтения с теорией ООП!


"Теория ООП" вообще не затрагивает такие вопросы сугубо языкового уровня как правила именования и видимости имен.

ms> Видать Страуструппу так удобнее!


Нет, просто есть определенные унифицированные правила обращения с именами в разных пространствах видимости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.