Другие языки программирования и технологии
С++ пару вопросов о ООП
4)Когда следует переопределять операторы с помощью дружественных функций, а когда с помощью функций элементов класса? 5)Что происходит при присваивании одного объекта другому (без переопределенной операции =) и какие побочные эффекты могут возникнуть? 15)Объясните, что означает ключевое слово protected. (Рассмотрите два случая: когда оно используется для задания элементов класса и когда оно используется в качестве спецификатора доступа.) 16)Что такое чистая виртуальная функция? Что такое абстрактный класс? 19)Приведите общую форму перегрузки бинарной операторной функции-члена. Спасибо.
4) Когда что проще
class A
{
A& opretator+=(const A& x)
{
// проще в классе, к объекту что то приплюсовать;
return *this;
}
};
// проще вне класса, делать дружественным нет необходимости.
A operator+(const A &x, const A &y)
{
A r(x);
return r += y;
}
5) Тупо копирируется область памяти, занимаемая объектом, в область памяти другого объекта. Побочные эффекты возникают в классах, объектам которых требуются допонительные ресурсы. При создании объект запрашивает (выделяет) это ресурс, при удалении - освобождает. Например динамически выделяемая память. Объект содержит указатель на эту память. При присваивании обного объекта другому нужно не скопировать значение указателя, а скопировать память, на которую тот указывает. Если этого не сделать, то оба объекта будут иметь указатель на один и тот же ресурс. После удаления одного из них второй выдаст глюк, потому что первый уже освободил этот ресурс.
15) public - открытый доступ к переменным-членам и функциям-членам класса. Везде и всем можно это трогать.
protected - защищенный доступ (ограниченный) . Можно трогать изнутри класса, изнутри производных классов, и из "друзей" класса
private - закрытый доступ. Можно трогать только изнутри класса и из "друзей" класса.
"друзья" объявляются внутри класса, извне записаться в друзья нельзя.
19) операторы разные бывают
class B
{
LPSTR m_lpName;
public:
operator LPCSTR() const { return m_lpName; }
};
позволяет пользоваться объектом как указателем const char*
B b;
strlen(b);
class A
{
A& opretator+=(const A& x)
{
// проще в классе, к объекту что то приплюсовать;
return *this;
}
};
// проще вне класса, делать дружественным нет необходимости.
A operator+(const A &x, const A &y)
{
A r(x);
return r += y;
}
5) Тупо копирируется область памяти, занимаемая объектом, в область памяти другого объекта. Побочные эффекты возникают в классах, объектам которых требуются допонительные ресурсы. При создании объект запрашивает (выделяет) это ресурс, при удалении - освобождает. Например динамически выделяемая память. Объект содержит указатель на эту память. При присваивании обного объекта другому нужно не скопировать значение указателя, а скопировать память, на которую тот указывает. Если этого не сделать, то оба объекта будут иметь указатель на один и тот же ресурс. После удаления одного из них второй выдаст глюк, потому что первый уже освободил этот ресурс.
15) public - открытый доступ к переменным-членам и функциям-членам класса. Везде и всем можно это трогать.
protected - защищенный доступ (ограниченный) . Можно трогать изнутри класса, изнутри производных классов, и из "друзей" класса
private - закрытый доступ. Можно трогать только изнутри класса и из "друзей" класса.
"друзья" объявляются внутри класса, извне записаться в друзья нельзя.
19) операторы разные бывают
class B
{
LPSTR m_lpName;
public:
operator LPCSTR() const { return m_lpName; }
};
позволяет пользоваться объектом как указателем const char*
B b;
strlen(b);
Похожие вопросы
- Вопрос программистам. ООП
- Ребят, вопрос по ООП в С++
- Вопрос по ООП. Инкапсуляция, наследие, полиморфизм. Как понять все это чудо?
- Вопрос по ооп. С#
- есть пару вопросов по программированию на С++
- Программеры! Просветите по Pascal! Есть пара вопросов.
- есть необходимость в создании своего сайта, ответьте пожалуйста на пару вопросов (см. вн)
- а какую лучше версию фотошопа скачать и где можно бесплатно. и если есть желание прокансультировать в пару вопросах.
- пару вопросов к программистам
- Программисты (именно по текущей профессии!), ответьте пожалуйста на пару вопросов?