Следующий пост -

Модификация класса Entry

Рубрика: C++, Дата: 5 March, 2013, Автор:
Tags:

Возьмите класс Entry и модифицируйте его таким образом, чтобы каждый член объединения всегда использовался в соответствии с его типом.

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

И нам еще дан листинг самого класса Entry и объединения я его как бы протестил как он работает. Вот код:

//modificirovat6 klacc Entry
#include <iostream>
using std::cout;
using std::endl;
using std::cin;

enum Type{S,I};

union Value
{
	char* s;
	int i;
};

struct Entry
{
	char* name;
	Type t;
//incpol6zyem v.s ecli t==S; icpol6zyem v.name ecli t==I
	Value v;
};

void f(Entry* p)
{
	if(p->t==S)
		cout <<p->v.s;
	else if(p->t==I)
		cout <<p->v.i;
}

int main()
{
	Entry a;
	a.name="hellow";
	a.v.s="Hellow world";
	//a.v.i=333;
	a.t=S;
	Entry* b=&a;
	f(b);
	cout <<endl;
	
	
	return 0;
}

Я так понимаю в задании нам нужно создать конструктор который будет правильно инициализировать Entry и функцию printV(), которая будет выводить значени класса. Я бы так сделал. Щас посмотрим чо у нас получиться.

Да шото получилось не нравиться конечно мне, мб и не правильно но фиг сним шо есть, то есть.

//modificirovat6 klacc Entry
#include <iostream>
using std::cout;
using std::endl;
using std::cin;

enum Type{S,I};

union Value
{
	char* s;
	int i;
};

struct Entry
{
	Entry(char* a)
	:t(S)
	{
		v.s=a;
	}
	Entry(int a)
	:t(I)
	{
		v.i=a;
	}
	
	void printV()
	{
		if(t==S)
			cout <<v.s;
		else if(t==I)
			cout <<v.i;
	}
	
	char* name;
	Type t;
//incpol6zyem v.s ecli t==S; icpol6zyem v.name ecli t==I
	Value v;
};

int main()
{
	Entry a("Hellow");
	a.printV();
	cout <<endl;
	
	Entry b(45);
	b.printV();
	cout <<endl;
	
	
	return 0;
}

Делал все просто. Создал конструктор и еще один перегруженный конструктор, а дальше тупо вывел v в соответствии с типом.

 

 

rss