Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

Перегрузка операторов. Преобразование типов - C++

16.11.2013, 22:42. Просмотров 1857. Ответов 8
Метки нет (Все метки)

Привет всем!
Я относительно недавно начал программировать на с++. Изучаю его по книжке Лафоре и дошел до темы "Перегрузка операторов.Преобразование типов"
Итак вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class cl1//создаем какой-то класс
{
int var1;
public:
cl1():var1(0){}// 2 конструктора
cl1(int f):var1(f){}
operator float() const// тут мы перегрузили оператор float???!!
{
 float temp = static_cast<float>(var1);
return temp;
}
int main()
{
cl1 per;
float c = static_cast<[B]float[/B]>(per);
cout<<c<<endl;
return 0;
}
Собственно просьба знающим :Объясните как работает эта неведомая штука (желательно на уровне компилятора,пошагово)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2013, 22:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов. Преобразование типов (C++):

Перегрузка операторов приведения типов - C++
Доброго времени суток! Возник вопрос по перегрузке оператора преобразования типа const char*. Вот пример: class Integer { public: ...

Перегрузка методов и преобразование типов. - C++
Такой вопрос. Есть класс. class MarkMSGProtocol_t : public MarkIO_t { public: MarkMSGProtocol_t(); virtual...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов - C++
Как написать код перегрузки операторов (+= и --) чтобы выполнялось действие v1+=v2--; v1 и v2 - массив чисел

Перегрузка операторов - C++
Здравствуйте уважаемые форумчане :) У меня имеется задание написать самодельный класс строки. Если с потоковым выводом я разобрался, то с...

перегрузка операторов - C++
попробую объяснить на примере допустим есть класс class myclass { private: string stroka; public: myclass(string...

8
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.11.2013, 23:19 #2
operator T(), реализованный для пользовательского типа, осуществляет преобразование пользовательского типа в тип T.
0
Иридодикциум
4 / 4 / 1
Регистрация: 07.01.2013
Сообщений: 34
17.11.2013, 00:58 #3
Я не знаю, поможет ли это Вам, но вот ниже моё задание и код:
Определить класс «Строка» – String длины n. Написать несколько конструкторов. Реализовать методы для выполнения конкатенации строк, извлечения символа из заданной позиции, сравнения строк. Перегрузить операции сложения, отношения, добавления, присваивания для данного класса.
Код
#include <iostream>
#include <conio.h>
#include <string.h>
#include <list>
using namespace std;

template <class T>
class stroki
{ 
public: char *x, *res; int i,j; T d;
stroki(){x=""; d=0;}
stroki(char *a, T del) {x=a; d=del;}
void str_set(stroki x, stroki y)
{bool b=true; char str[50]; int k=0;
for (i=0;i<=strlen(x.x);i++)
{ for (j=0;j<=strlen(y.x);j++)
{if (x.x[i]==y.x[j]) b=false;};
if (b) {str[k]=x.x[i];k++;};
b=true;}
cout<<"Первая строка без символов второй: ";
for (i=0;i<k;i++)
cout<<str[i];};
bool operator ==(stroki ob2)







{bool b=true; 
if (strlen(x)==strlen(ob2.x)){
for(i=0;i<=strlen(ob2.x);i++)
if (x[i]!=ob2.x[i]) b=false;} else b=false; 
return b;};

stroki udalenie(stroki ob,T d)
{
	stroki res; 
	j=0; 
	char str[50];
for (i=0;i<=strlen(x);i++)
if (i!=d-1) 
{str[j]=x[i]; j++;};  
str[j]=NULL;
res.x=str;
cout<<"Строка: "<<res.x;
return res;
};











stroki operator +(stroki ob)
{
	stroki res; 
	res.x=x;
	strncat(res.x, ob.x, strlen(ob.x));
	cout<<"\nРезультат конкатенации: "<<res.x;
	return res;
};

stroki operator =(stroki ob)
{
	x=ob.x;
	return *this;
};

};

int main()
{ 
	setlocale(LC_ALL,"Russian");
	char *a=new char[50], *b=new char[50],*c=new char[50]; 
	int del; 
cout<<"Введите строку 1: "; 
cin.getline(a,50);
cout<<"Введите строку 2: "; 
cin.getline(b,50);
stroki<int> ob1(a,0), ob2(b,0),ob3;
ob1.str_set(ob1, ob2);
cout<<'\n';
if (ob1==ob2) cout<<"Строки равны"; else cout<<"Строки не равны";
int udal;
cout<<'\n';
cout<<"Удаляем из строки: ";cin>>udal;
cout<<"Символ: ";cin>>del; 
stroki<int> ob4(c,del);
if (udal==1)
ob4=ob1.udalenie(ob1, del);
if (udal==2)
ob4=ob2.udalenie(ob2, del);
ob3=ob1+ob2;
getch();
return 0;
}
0
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
17.11.2013, 01:20  [ТС] #4
Спасибо,но я умею пользоваться перегрузкой этих операций
Трудность у меня возникла в преобразовании пользовательских типов в стандартные. Мне интересно как поступает компилятор обнаружив выражение
C++
1
int a = d2
(где d2 - объект класса Dist, при этом в классе Dist определена функция преобразования из dist в int - operator int(){...})
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.11.2013, 01:50 #5
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Мне интересно как поступает компилятор обнаружив выражение
...
А если была объявлена, то вызывается и её результат присваивается переменной.
1
Миниатюры
Перегрузка операторов. Преобразование типов  
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,294
Завершенные тесты: 1
17.11.2013, 01:58 #6
А еще можно (и даже лучше) написать так, чтобы людей капельку удивить:
C++
1
explicit operator float() const
0
gromo
17.11.2013, 02:29
  #7

Не по теме:

Цитата Сообщение от ct0r Посмотреть сообщение
А еще можно (и даже лучше) написать так, чтобы людей капельку удивить:
странно, что такая возможность появилась только в С++11

0
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
17.11.2013, 03:08  [ТС] #8
Спасибо
Подскажи пожалуйста: из какой книжки отрывок ?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.11.2013, 03:40 #9
Прата. "Язык Программирования C++. Лекции и упражнения."
1
17.11.2013, 03:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 03:40
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Помогите решить задачу на c++ мучаюсь 3 день Перегрузить операторы «==» и «!=» для строк. Оператор «==» возвращает соответственно 1,...

Перегрузка операторов - C++
Объясните, пожалуйста, что означает, эта строка? return a != t1.a &amp;&amp; b != t1.b ? 1 : 0; что означает ? 1 : 0; ? Заранее...

Перегрузка операторов. - C++
Существует ли возможность перегрузить оператор так, что бы в main можно было бы осуществлять вызов для объекта класса, содержащего...

Перегрузка операторов - C++
Всем привет! Помогите разобраться с перегрузкой операторов. Хочу реализовать класс который будет представлять тип double с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru