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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2013, 06:33   #1
I_I_I
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 17
По умолчанию Задача из Страуструпа 11.14.20.

Помогите, плиз. Вот задача:

(*1) При наличии определений
struct S { int x, y; }
struct T { char* p; char* q; }
дайте определение класса C, позволяющего использовать x и p из S и T примерно так же, как если бы они были членами C.

(*1) Означает, что задача должна решаться примерно за 1-10 минут.

Наследование использовать нельзя, поскольку задача относится к Главе 11 "Перегрузка операторов", идущей до темы "Наследование".
I_I_I вне форума Ответить с цитированием
Старый 23.07.2013, 10:11   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
class C {
  S s;
  T t;
};
не? )
и используешь примерно также
rrrFer вне форума Ответить с цитированием
Старый 23.07.2013, 18:30   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
class C {
public:
	operator S() {
		return s;
	}

	operator T() {
		return t;
	}

private:
	S s;
	T t;
};
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 23.07.2013, 22:21   #4
I_I_I
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 17
По умолчанию

2 pproger

Спасибо за помощь!
I_I_I вне форума Ответить с цитированием
Старый 24.07.2013, 10:49   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

pproger, и как же их использовать? c.x = 1, например?
Мне кажется, имелось в виду
Код:
class C
{
public:
	S s;
	T t;
	int& x;
	char*& p;
	C() : x(s.x), p(t.p) { }
};
Somebody вне форума Ответить с цитированием
Старый 24.07.2013, 11:12   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Somebody
Код:
struct S { int x, y; };
struct T { char* p; char* q; };

class C {
public:
	operator S() {
		return s;
	}

	operator T() {
		return t;
	}

private:
	S s;
	T t;
};

void foo(const S &s)
{
	cout << s.x << endl;
	cout << s.y << endl;
}

void bar(const T &t)
{
	cout << t.p << endl;
	cout << t.q << endl;
}

int main(int argc, char ** argv)
{
	S s;
	T t;
	C c;

	// ...

	foo(s);
	bar(t);

	foo(c);
	bar(c);

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.07.2013, 11:22   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Так тут временный объект - копия, это только read-only получается.
Somebody вне форума Ответить с цитированием
Старый 24.07.2013, 11:43   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Somebody
в задании не указано, как предполагается использовать новый класс. по приведенной автором главе я предположил, что требуется именно это.

Цитата:
Так тут временный объект - копия, это только read-only получается.
ну возвращай в операторе неконстантную ссылку, кто мешает то
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.07.2013, 15:12   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
ну возвращай в операторе неконстантную ссылку, кто мешает то
никто не мешает, но возвращать неконстантую ссылку на приватные поля, как минимум, не хорошо. Приведение типов тут ваще непричем, ИМХО. Использовать "примерно так же" это не вот это:
Код:
 ((S*)c)->x = 1234;
  std::cout << ((S*)c)->x;
Я думаю, доступ через точку имеется ввиду )
rrrFer вне форума Ответить с цитированием
Старый 24.07.2013, 18:08   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2rrrFer
Цитата:
возвращать неконстантую ссылку на приватные поля, как минимум, не хорошо
когда задача чисто академическая, с ограничениями на решение вопрос о том, что хорошо, а что нет вообще не ставится. вот требования, вот решение.

Цитата:
((S*)c)->x = 1234;
std::cout << ((S*)c)->x;
я не предлагаю ничего вручную кастовать. по условию задачи ничего не сказано о том, как предполагается использовать новую структуру. я говорю, что все операции с элементами структуры в моем варианте реализуются только через функции, на вход которым передается тип структуры. компилятор сам выберет нужный каст. под "использовать примерно так же" я понимаю статический полиморфизм.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
калькулятор страуструпа.Добавление структур KirillKirill Помощь студентам 1 29.10.2012 14:14
Страуструпа или Лафоре EvWinApi Общие вопросы C/C++ 1 27.03.2012 08:41
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Калькулятор Страуструпа Эйнж Общие вопросы C/C++ 1 01.04.2009 00:44