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

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

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

Вопрос об особенности char и конструкторах - C++

24.12.2008, 13:25. Просмотров 988. Ответов 10
Метки нет (Все метки)

1. Хочу вывести на экран таблицу символов ascii:
Код
#include <iostream>
 
 int main()
 {
     unsigned short T;
 
     for (char p=0; p<=255; p++ ) 
     {
         T=p;
         std::cout << p << " : " << T <<"\n";
     }
 
     return 0;
 }
Почему при использовании char p в цикле программа попадает в непонятный бесконечных цыкл?
Если же я использую в цикле шорт, а затем присваиваю его значение чар, то все ОК. Почему так?
Какие особенности типа чар в с++? он что знакойвый первоначально?
Розбераюсь в асме, паскакале, а тут си++ на мелочах изучение тормозит..

2.
Вот такой книжный пример:
Код
 // Listing 12.5
 
 // Resolving memory leaks
 
 #include <iostream>
 
 
 
 class SimpleCat
 
 {
 
 public:
 
     SimpleCat (int age, int weight);
 
     ~SimpleCat() {}
 
     int GetAge() { return itsAge; }
 
     int GetWeight() { return itsWeight; }
 
 
 
 private:
 
     int itsAge;
 
     int itsWeight;
 
 };
 
 
 
 SimpleCat::SimpleCat(int age, int weight)[COLOR=red]:[/COLOR]
 
[COLOR=red]itsAge(age), itsWeight(weight) [/COLOR]{}
 
 
 
 SimpleCat & TheFunction();
 
 
 
 int main()
 
 {
 
     SimpleCat & rCat = TheFunction();
 
     int age = rCat.GetAge();
 
     std::cout << "rCat is " << age << " years old!\n";
 
     std::cout << "&rCat: " << &rCat << std::endl;
 
     // How do you get rid of that memory?
 
     SimpleCat * pCat = &rCat;
 
     delete pCat;
 
     // Uh oh, rCat now refers to ??
 
     return 0;
 
 }
 
 
 
 SimpleCat &TheFunction()
 
 {
 
     SimpleCat * pFrisky = new SimpleCat(5,9);
 
     std::cout << "pFrisky: " << pFrisky << std::endl;
 
     return *pFrisky;
 
 }
Вопрос: что это за двоеточие (выделенное красным) и за текст перед пустым телом конструктора стоит? Где об этом почитать можно?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
24.12.2008, 13:29     Вопрос об особенности char и конструкторах #2
знаковость/незнаковость chara не оговаривается стандартом.У большинства компиляторов он по умолчанию знаковый. Этот флаг компиляторов меняется.Но делать этого не стоит - лучше использовать unsigned char, где нужна беззнаковость.

По поводу конструктора - читать в учебнике по теме наследования
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 13:38  [ТС]     Вопрос об особенности char и конструкторах #3
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
знаковость/незнаковость chara не оговаривается стандартом.У большинства компиляторов он по умолчанию знаковый. Этот флаг компиляторов меняется.Но делать этого не стоит - лучше использовать unsigned char, где нужна беззнаковость.

По поводу конструктора - читать в учебнике по теме наследования
по 1. - так как ты писал использовал unsigned char, но все-равно программа попадает в какой-то бесконечный цикл. Мне кажется, что есть какие-то ограничения по использованию. Буду очень благодарен знающим за краткий пример реально работающей такой программы.

по 2. Я догадываюсь, что там что-то связано с наследованием, но книги у меня 3 и ни в одной нету инфы по описаноому.
З.Ы. Как переопределить методы знаю, но тут выглядит как-то по другому.
Lord_Voodoo
Супер-модератор
8580 / 2180 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
24.12.2008, 13:47     Вопрос об особенности char и конструкторах #4
компилил code block:
Код
#include <iostream>
using namespace std;
int main()
{
 for(char a = -128; a < 127; a++)
   cout << a << endl;
 for(unsigned char a = 0; a < 255; a++)
   cout << a << endl;
 return 0;
}
проблема в том, что символов не 256, а 255 и по достижению 256 получаете 0 и так до бесконечности...
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
24.12.2008, 13:50     Вопрос об особенности char и конструкторах #5
WooDooMan, значений 256,просто нумеруются с нуля) поэтому 255 последнее
Cosolapiy,256,как следствие, не достигается
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 14:07  [ТС]     Вопрос об особенности char и конструкторах #6
WooDooMan
XuTPbIu_MuHTAu
Спасибо.
Так как в асме и паскакале был гуру, то диапазоны знаю.
Согласен, но как мне тогда 255 символ вывести. Ведь цикл работает только до 254?

Добавлено через 6 минут 32 секунды
Что же это за звери (tsAge(age), itsWeight(weight) ) перед скобками {}?
Что это? Не выглядит как переопределение метода при наследовании...

SimpleCat::SimpleCat(int age, int weight):

itsAge(age), itsWeight(weight) {}
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.12.2008, 14:10     Вопрос об особенности char и конструкторах #7
Почитай, пожалуйста, синтаксис С++. Это иницализация переменных переданными параметрами и пустое тело конструктора. Займись синтаксисисом!
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 14:28  [ТС]     Вопрос об особенности char и конструкторах #8
Vourhey, прости чайнига, но в моих книгах нету, а найденные описания такие ньюансы не описывают.
Что что тело пустое я вижу. Я догадываюсь, что то инициализация, но
1) почему перед телом стоит??
2) itsAge, itsWeight - это же переменные, а не функции, а тут: itsAge(age), itsWeight(weight), выглядят как функции, и где же там тогда ретурн age и ретурн weight???

Или дайте ссылку на толковую литературу, чтобы вас не мучать.

Не бросайтесь камнями, ибо в отличие от вообще чайников в программировании, я чайник в с++ и из-за этого сраху вникаю в тонкости...

Спасибо.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.12.2008, 14:40     Вопрос об особенности char и конструкторах #9
Почему перед телом? А почему нет? Потому что это по правилам синтаксиса. Да не функции это. Это инициализация переменных(членов класса)...
Код
Конструктор(бла-бла, трали-вали): переменная1(бла-бла), переменная2(трали-вали). . .
Восле чего переменная1 будет иметь значение "бла-бла" и т. д.

Ссылки не знаю. Найди в интернете Герберта Шилдта, или Бьерна Страуструпа. Читай.

Добавлено через 5 минут 17 секунд
Хорош на эту тему. А то уже оффтопим.
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 14:44  [ТС]     Вопрос об особенности char и конструкторах #10
Vourhey
спасибо огромнейшее!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2008, 15:55     Вопрос об особенности char и конструкторах
Еще ссылки по теме:
C++ О классах и конструкторах и об операторах case c {} и без. Нюансы
(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& C++
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
C++ Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
C++ Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*)

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

Или воспользуйтесь поиском по форуму:
Lord_Voodoo
Супер-модератор
8580 / 2180 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
24.12.2008, 15:55     Вопрос об особенности char и конструкторах #11
XuTPbIu_MuHTAu, да торможу... просто никогда в голову не приходило мысли длЯ цикла использовать такой коварный тип как char или unsigned char...
Код
 unsigned char a = 0;
 do{
   cout<<(int)a<<" "<< a << endl;
   if(a==255) break;
   a++;
 }while(true);
Yandex
Объявления
24.12.2008, 15:55     Вопрос об особенности char и конструкторах
Ответ Создать тему
Опции темы

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