Форум программистов, компьютерный форум CyberForum.ru

Функции преобразования - C++

Восстановить пароль Регистрация
 
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 21:22     Функции преобразования #1
Hi all
Вот первый код
Код
#include "stdafx.h"
#include "conio.h"
using namespace std;
class String{
private:
	char* ptr;
public:
	String(){
		ptr=new char[1];
		ptr[0]='\0';
	}
	String(char* s){
		int n=strlen(s);
		ptr=new char[n+1];
		strcpy(ptr,s);
	}
	~String(){
		delete[]ptr;
		cout << "Udalenie" << endl;
	}
	operator char*(){
		return ptr;
	}
};
int main(){
	String a("String 1");
	String b("String 2");
	cout << "The value of a is : ";
	cout << a << endl;
	cout << "The value of b is: ";
	cout << b << endl;
}
Пишут в учебнике что если объявлена функция
Код
	operator char*(){
		return ptr;
	}
то можно выводить объекты класса String, если ожидаются данные типа *char

После запуска прога выдала это:
The value of a is :String1
The value of b is :String2
Udalenie
Udalenie
Ну, я подумал, а что будет если использовать это
operator int(){
return a;
}
Вот весь код
Код
#include "stdafx.h"
#include "conio.h"
using namespace std;
int i,a;
class String{
private:
	char* ptr;
public:
	String(){
		ptr=new char[1];
		ptr[0]='\0';
	}
	String(int i){
		a=i;
	}
	String(char* s){
		int n=strlen(s);
		ptr=new char[n+1];
		strcpy(ptr,s);
	}
	~String(){
		delete[]ptr;
		cout << "Udalenie" << endl;
	}
	operator char*(){
		return ptr;
	}
	operator int(){
		return a;
	}
};
int main(){
	String a("String 1");
	String b("String 2");
	String c(5);
	cout << "The value of a is : ";
	cout << a << endl;
	cout << "The value of b is: ";
	cout << b << endl;
	cout << "The value of c is: ";
	cout << c << endl;
}
Не пойму, почему компилятор выдает
The value of a is :5
The value of b is :5
The value of с is :5
Udalenie
Udalenie
Udalenie

Откуда в объекте a и b пятёрки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
04.10.2010, 21:35     Функции преобразования #2
Оттуда, что он преобразует при выводе твой класс к int, а когда идет преобразование к int, то он берет глобальную переменную a, которая изменяется при создании объекта c.
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 22:13  [ТС]     Функции преобразования #3
Что то ничего не понял
Поправьте меня
Код
        String a("String 1");
Запускается это
Код
         String(char* s){
                int n=strlen(s);
                ptr=new char[n+1];
                strcpy(ptr,s);
        }
Код
 String b("String 2");
Запускается это
Код
       String(char* s){
                int n=strlen(s);
                ptr=new char[n+1];
                strcpy(ptr,s);
        }
Код
       String c(5);
Запускается это
Код
        String(int i){
                a=i;
       }
Код
        cout << "The value of a is : ";
        cout << a << endl;
Запускается это
Код
       operator char*(){
                return ptr;
        }
Код
        cout << "The value of b is: ";
        cout << b << endl;
Запускается это
Код
      operator char*(){
                return ptr;
        }
Код
 cout << "The value of c is: ";
          cout << c << endl;
Запускается это
Код
        operator int(){
                return a;
        }
Напишите подробней где что преобразуется
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
04.10.2010, 22:16     Функции преобразования #4
C++
1
2
3
4
5
6
cout << "The value of a is : ";
cout << a << endl;
Запускается это
operator int(){
return a;
}
C++
1
2
3
4
5
6
cout << "The value of b is: ";
cout << b << endl;
Запускается это
operator int(){
return a;
}
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 22:25  [ТС]     Функции преобразования #5
Цитата Сообщение от gooseim Посмотреть сообщение
cout << "The value of a is : ";
cout << a << endl;
Запускается это
operator int(){
return a;
}

cout << "The value of b is: ";
cout << b << endl;
Запускается это
operator int(){
return a;
}
Так должно это запускаться
Код
        operator char*(){
                return ptr;
        }
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
04.10.2010, 22:26     Функции преобразования #6
Так должно это запускаться
С чего бы? Потому что вам так хочется?
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 22:40  [ТС]     Функции преобразования #7
Цитата Сообщение от gooseim Посмотреть сообщение
cout << "The value of a is : ";
cout << a << endl;
Запускается это
operator int(){
return a;
}

cout << "The value of b is: ";
cout << b << endl;
Запускается это
operator int(){
return a;
}
Код
cout << a << endl;
Почему запускается именно
Код
operator int(){
return a;
}
По каким признакам узнаете ?
Почему не
Код
       operator char*(){
                return ptr;
        }
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
04.10.2010, 22:45     Функции преобразования #8
Lotles, на самом деле ваш код вообще не должен работать. Например, в minGW он у меня работает, т.к. компилятор не знает, к чему привести: к char* или int.
Пишите так, и будет вам счастье:
C++
1
2
3
4
5
6
7
8
9
10
11
int main(){
        String a("String 1");
        String b("String 2");
        String c(5);
        cout << "The value of a is : ";
        cout << (char*)a << endl;
        cout << "The value of b is: ";
        cout << (char*)b << endl;
        cout << "The value of c is: ";
        cout << (int)c << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2010, 22:47     Функции преобразования
Еще ссылки по теме:

Есть ли какие то стандартные функции преобразования double в string? C++
Ошибка в функции преобразования времени C++
Не существует подходящей функции преобразования из "std::string" в "int" C++

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

Или воспользуйтесь поиском по форуму:
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 22:47  [ТС]     Функции преобразования #9
Пасиба
Yandex
Объявления
04.10.2010, 22:47     Функции преобразования
Ответ Создать тему
Опции темы

Текущее время: 18:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru