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

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

Войти
Регистрация
Восстановить пароль
 
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
#1

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

04.10.2010, 21:22. Просмотров 814. Ответов 8
Метки нет (Все метки)

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 пятёрки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2010, 21:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функции преобразования (C++):

Функции преобразования - C++
Подскажите, пожалуйста ф-ции преобразования в С++ из int в string и наоборот.

Ошибка в функции преобразования времени - C++
Как можно или нужно написать программу, которая, при вводе с клавиатуры, делает преобразования времени при помощи двух функций. Одна...

Ошибка в функции преобразования Фурье - C++
Здравствуйте! Делаю гитарный тюнер, и застряла на моменте определения частоты уже снятого с микрофона звука. Звук с микрофона снимается в...

Функции преобразования Григорианской даты в Юлианскую - C++
Всем привет. Возникла проблема преобразования Григорианской даты дд.мм.гггг (обычной даты которой мы постоянно пользуемся) в Юлианскую...

Есть ли какие то стандартные функции преобразования double в string? - C++
В проекте необходимы функции, для преобразование double в string и наоборот. Первое получилось очень даже просто static double...

Не существует подходящей функции для преобразования из std::string в LPCTSTR - C++
Ошибка: не существует подходящей функции для преобразования из std::string в LPCTSTR. Как это можно исправить или по другому как-то...

8
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
04.10.2010, 21:35 #2
Оттуда, что он преобразует при выводе твой класс к int, а когда идет преобразование к int, то он берет глобальную переменную a, которая изменяется при создании объекта c.
0
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;
        }
Напишите подробней где что преобразуется
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
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;
}
0
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;
        }
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
04.10.2010, 22:26 #6
Так должно это запускаться
С чего бы? Потому что вам так хочется?
0
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;
        }
0
gooseim
Эксперт С++
510 / 414 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
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;
}
1
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
04.10.2010, 22:47  [ТС] #9
Пасиба
0
04.10.2010, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2010, 22:47
Привет! Вот еще темы с ответами:

Структура "Время". Функции преобразования в секунды и из секунд - C++
Здравствуйте решаю такую вот задачку ,прошу помощи : Модифицируйте программу, описанную в упражнении 11 главы 4 &quot;Структуры&quot;,...

Не существует подходящей функции преобразования из "std::string" в "int" - C++
Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. Упр.3.17 ...

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" - C++
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. ...

Написать функции для преобразования IP адреса из dot-decimal нотации в int и из int в dot-decimal нотацию - C++
IP-адрес - это четверка a.b.c.d, где a, b, c, d целые числа из интервала . Требуется написать функции encode и decode: unsigned int...


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

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

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