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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 18:26   #1
ArtGoN
Пользователь
 
Регистрация: 11.05.2010
Сообщений: 11
По умолчанию Преобразование типов

Есть программа класса Матрица, нужно преобразовать типы разными способами. Подскажите как это сделать.
Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
int y;
 
// Класс матрица
class Matrix
	{
	private:
	// Собственные элементы:
 
		static int size;     // Порядок матрицы
		int **matrix;			// Матрица
	public:
	// Общедоступные элементы:
 
		Matrix() {}	// Конструктор по умолчанию
		Matrix(const Matrix &Object); // Конструктор копирования
		~Matrix();	// Деструктор
 
		Matrix &operator=(const Matrix &Object); // Перегрузка =
 
		Matrix operator+(Matrix &);	// Сложение матриц
		Matrix operator-(Matrix &);	// Вычитание матриц
		Matrix operator*(Matrix &);	// Перемножение матриц
 
		// Перегрузка оператора << для вывода матрицы
		friend ostream &operator<<(ostream &, Matrix &);
		// Перегрузка оператора >> для ввода матрицы
		friend istream &operator>>(istream &, Matrix &);
	};
 
// Конструктор копирования
Matrix::Matrix(const Matrix &Object)
	{
	int i,j;
	size = Object.size;
	matrix = new int *[size];
	for (i = 0; i < size; i++)
		matrix[i] = new int [size];
	for (i = 0; i < size; i++)
		for (j = 0; j < size; j++)
	matrix[i][j] = Object.matrix[i][j];
	}
 
// Деструктор
Matrix::~Matrix()
	{
	for (int i = 0; i < size; i++)
		delete matrix[i];
	delete matrix;
	}
 

// =
Matrix& Matrix::operator=(const Matrix &Object)
	{
	int i, j;
	size = Object.size;
	matrix = new int *[size];
	for (i = 0; i < size; i++)
		matrix[i] = new int [size];
	for (i = 0; i < size; i++)
		for (j = 0; j < size; j++)
	matrix[i][j] = Object.matrix[i][j];
	return *this;
	}
 
//+
Matrix Matrix::operator+(Matrix &fp1)
	{
	int i, j;
	if (size == fp1.size)
		{
		Matrix fp(fp1);
		for (i=0;i<fp.size;i++)
			for (j=0;j<fp.size;j++)
				fp.matrix[i][j]=matrix[i][j]+fp1.matrix[i][j];
		return fp;
		}
	}
 
// -
Matrix Matrix::operator-(Matrix &fp1)
	{
	int i, j;
	if (size == fp1.size)
		{
		Matrix fp(fp1);
		for (i = 0; i < fp.size; i++)
			for (j = 0; j < fp.size; j++)
				fp.matrix[i][j] = matrix[i][j] - fp1.matrix[i][j];
		return fp;
		}
	}
 
// *
Matrix Matrix::operator*(Matrix &fp1)
	{
	int i, j, k, sum;
	if (size == fp1.size)
		{
		Matrix fp(fp1);
		for(i = 0; i < fp.size; i++)
			for(j = 0; j < fp.size; j++)
				{
				sum = 0;
				for (k = 0; k < fp.size; k++)
					sum += matrix[i][k] * fp1.matrix[k][j];
				fp.matrix[i][j]=sum;
				}
		return fp;
		}
	}
 
// >>
istream &operator>>(istream &fi, Matrix &fp)
	{
	int i, j;
	fp.matrix = new int *[fp.size];
	for (i = 0; i < fp.size; i++)
		fp.matrix[i] = new int [fp.size];
 
	for (i = 0; i < fp.size; i++)
		for (j = 0; j < fp.size; j++)
		{
		gotoxy((j + 1) * 4, y + i + 2);
		fi >> fp.matrix[i][j];
		}
	y += i + 2 /*- 1*/;
	return fi;
	}
 
// <<
ostream &operator<<(ostream &fo, Matrix &fp)
	{
	int i, j;
	for (i = 0; i < fp.size; i++)
		for (j = 0; j < fp.size; j++)
			{
			gotoxy((j + 1) * 4, y + i + 2);
			fo << fp.matrix[i][j];
			}
	y += i + 2 /*- 1*/;
	return fo;
	}
 
int Matrix::size = 2;
 
void main()
	{
	clrscr();
	Matrix pr1, pr2;
	cout << " Vveditb matr A ->\n ";
	cin >> pr1;
	cout << "\nVeditb matr B ->\n ";
	cin >> pr2;
	cout << "\nA+B ="<<(pr1+pr2);
	cout << "\n\nA-B ="<<(pr1-pr2);
	cout << "\n\nA*B ="<<(pr1*pr2);
	cout << "\n\nA=B, A="<<(pr1=pr2);
	getch();
	}
ArtGoN вне форума Ответить с цитированием
Старый 16.11.2010, 18:44   #2
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Преобразовать типы где? Полей класса что-ли?
optimator вне форума Ответить с цитированием
Старый 16.11.2010, 19:18   #3
ArtGoN
Пользователь
 
Регистрация: 11.05.2010
Сообщений: 11
По умолчанию

У меня матрица выводится как int, можна ли сделать такое преобразование чтобы она выводилась как float или char?
ArtGoN вне форума Ответить с цитированием
Старый 16.11.2010, 19:24   #4
Tema_Crazzzy
Форумчанин
 
Регистрация: 29.04.2010
Сообщений: 114
По умолчанию

Код:
cout<<(float)matrix[i][j]<<endl;
Я правильно вас понял?
Tema_Crazzzy вне форума Ответить с цитированием
Старый 16.11.2010, 19:27   #5
optimator
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 92
По умолчанию

Можно с помощью шаблона, например
Код:
template <typename TType>
class Matrix{
	private:
	// Собственные элементы:
 
	  static int size;     // Порядок матрицы
               TType **matrix;
};


int main(){

   Matrix<int> p1;
   Matrix<float> p2;
//=========
}
Можно еще static_cast сделать или преобразованием типов в стиле C
optimator вне форума Ответить с цитированием
Старый 16.11.2010, 19:35   #6
ArtGoN
Пользователь
 
Регистрация: 11.05.2010
Сообщений: 11
По умолчанию

Мне нужно сделать чет такое :
Код:
class SmallInt {
public:
   SmallInt( int ival ) : value( ival ) { }

   // конвертер
   // SmallInt ==> int
   operator int() { return value; }

   // перегруженные операторы не нужны

private:
   int value;
};
Код:
//Целое число 3 расширяется до 3.0 и складывается с константой двойной точности 3.14159, что дает 6.14159
SmallInt si( 3 );
si + 3.14159
Я только незнаю как это применить к своей програме..
ArtGoN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование типов Ra88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 22.07.2010 02:56
Преобразование типов Aleksandra1990 Общие вопросы C/C++ 5 12.05.2010 17:32
преобразование типов Dimarik Общие вопросы C/C++ 1 03.04.2010 16:28
Си. Преобразование типов pif Помощь студентам 3 20.04.2009 13:54
Преобразование типов Pronik Общие вопросы Delphi 2 12.06.2007 12:23