Ну и как ты себе представляешь это преобразование?=)
Это типа новая модная шутка, да?=)
В визуал с++ такое преобразование является Расширяющим .Впринципе, расширяющие преобразования никогда не вызывают переполнение, но могут привести к потере точности, так что хорошо подумай: либо ты перепишешь пару строк кода, либо твой код будет не совсем стабильным=)
Но если ты уж так хочешь, то я могу предложить способ, который я использовал на практике. Он заключается в использовании Конструктора. Но нам нужно будет перегружать функцию. Пример определяет рудиментарный класс строк, допускающих конкатенацию с помощью знака сложения.
///////////////////////////////////////
#pragma hdrstop
#include <condefs.h>
#include <string.h>
#include <stdio.h>
class String {
char *str; // Указатель на динамическую строку.
int len; // Длина строки.
String(int); // Вспомогательный конструктор. public:
String(const Strings); // Конструктор копии.
String(const char*); // Конструктор преобразования.
~String () ;
String Soperator=(const Strings);
String operators- (const Strings);
friend String operator+(const Strings, const Strings);
void Show () ;
};
String::String(int size)
{
len = size;
str = new char[len + 1]; // +1 байт для завершающего 0.
}
String::String(const String ssrc)
{
len = src.len;
str = new char[len + 1];
strcpy(str, src.str);
}
String::String(const char *s)
{
len = strlen(s) ;
str = new char[len + 1];
strcpy(str, s);
String::~String()
{
delete [] str;
/////////////////////////////////////////
// Операция присваивания.
//
String SString::operator=(const String &op)
{
delete [] str; // Удаление старых данных.
len = op.len;
str = new char[len + 1]; // Выделение новой строки.
strcpy(str, op.str);
return *this;
}
///////////////////////////////////////////
// Функция-элемент operator+0.
//
String String::operators- (const String &op)
{
String temp(len + op.len); // Временный объект.
strcpy(temp.str, str); // Копирование первой строки.
strcat(temp.str, op.str); // Присоединение второй строки.
return temp;
}
////////////////////////////////////////////
// Дружественная функция operator+() Аналогична предыдущей,
// но допускает С-строку в качестве первого операнда.
//
String operator+(const String Sfop, const String &sop)
{
String temp(fop.len + sop.len);
strcpy(temp.str, fop.str);
strcat(temp.str, sop.str);
return temp;
}
void String::Show()
{
printf("%s: %d \n", str, len);
}
irit main()
{
char cStr[] °= "This is а С string! ";
String rirst = "First String string. ;
String second = "Second String string. ";
String resStr = "";
resStr.Show() ;
resStr = first + second; // Вызывает операцию класса.
resStr.:Shp,w ();
resStr = cStr + resStr; // Вызывает дружественную
// операцию reeStr.Show()
resStr = first + second + cStr; // Обе операции - из
// класса. resStr.Show () ;
return 0;
}
Поскольку имеется конструктор преобразования char* в String, компилятор автоматически приводит первый операнд к типу String, создавая на стеке временный объект, и затем выполняет сложение с помощью дружественной функции.=)
Тут немного лишнее есть, но я так сделал чтобы тебе принцип понятен был=). Если это усвоишь, значит я думаю, вопросов о преобразовании вообще не будет... Тока смотри доки по типам, .тк. вообще-то не следует так делать=)
Надеюсь, ты меня понял.....