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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 16:36   #1
Mike92
Пользователь
 
Регистрация: 07.05.2011
Сообщений: 14
По умолчанию Потоковый вывод из производного класса

столкнулся с проблемкой: нужно из производного класса , через перегруженную операцию потокового вывода вывести на экран значение переменных состояния не только производного класса, но и базового. базовый класс абстрактный. препод дал подсказку : говорит нужно воспользоваться тем, что в базовом классе так же есть перегр оператов << и че то про преобразование типов говорил...
подскажите плиз как такое реализовать
Mike92 вне форума Ответить с цитированием
Старый 07.05.2011, 16:43   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Код:
TBaseClass::operator << (...);
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.05.2011, 16:44   #3
Mike92
Пользователь
 
Регистрация: 07.05.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Код:
TBaseClass::operator << (...);
а куда этот код писать?
Mike92 вне форума Ответить с цитированием
Старый 07.05.2011, 16:49   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

В оператор класса-наследника.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.05.2011, 16:58   #5
Mike92
Пользователь
 
Регистрация: 07.05.2011
Сообщений: 14
По умолчанию

а еще как нибудь можно?
Mike92 вне форума Ответить с цитированием
Старый 07.05.2011, 17:04   #6
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Вообще, кажется, я вас ввел в заблуждение. Сейчас напишу правильное решение.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.05.2011, 17:12   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

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

class CBase
{
	friend ostream& operator << (ostream& stream, const CBase obj);
protected:
	int x;
public:
	CBase(void){x = 25;}
};

ostream& operator << (ostream& stream, const CBase obj)
{
	stream << "x = " << obj.x << endl;
	return stream;
}

class CDerived : CBase
{
	friend ostream& operator << (ostream& stream, const CDerived obj);
protected:
	int y;
public:
	CDerived(void){y = 71;}
};

ostream& operator << (ostream& stream, const CDerived obj)
{
	stream << (CBase)obj;
	stream << "y = " << obj.y;
	return stream;
}

int main()
{
	CDerived object1;
	cout << object1;
	cin.get();
	return 0;
}
А абстрактным базовый класс быть не может, поскольку тогда будет невозможно воспользоваться операцией приведения типов.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 07.05.2011, 17:17   #8
Mike92
Пользователь
 
Регистрация: 07.05.2011
Сообщений: 14
По умолчанию

спасибо за развернутый ответ.
Mike92 вне форума Ответить с цитированием
Старый 07.05.2011, 17:36   #9
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

а примерно как-то так нельзя сделать?
Код:
class b {
	int i;
protected:
	int geti() { return i; }
public:
	b():i(10) {}
};



class d: public b {
	int j;
public:
	d():j(20) {}

	friend std::ostream& operator<<(std::ostream &stream, d obj) {
		stream << obj.j << ' ' << obj.geti();
		return stream;
	}
};
onewho вне форума Ответить с цитированием
Старый 07.05.2011, 18:50   #10
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
а примерно как-то так нельзя сделать?
Можно, даже лучше, но задание подразумевает использование приведения типов и то, что для базового класса уже определен оператор потокового сдвига.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24
Не получается реализовать вывод содержимого вектора класса на экран Progsenya Общие вопросы C/C++ 4 09.09.2010 21:38
stream services( потоковый сервис) 13th Свободное общение 2 27.12.2009 22:39
Блок-схемы и потоковый граф к программе, Delphi Absentik Фриланс 2 19.12.2009 12:42
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55