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

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

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

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

24.12.2008, 13:25. Просмотров 1017. Ответов 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;
 
 }
Вопрос: что это за двоеточие (выделенное красным) и за текст перед пустым телом конструктора стоит? Где об этом почитать можно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2008, 13:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос об особенности char и конструкторах (C++):

Вопрос по Char - C++
Вот в чем суть я токо изучаю С++ токо неделю (самоучка по книге Шилдта) раньше програмировал на Паскале. Как я понял переменная типа Char...

_itoa,вопрос по char* - C++
В MSDN описана функция char *_itoa( int value, char *str, int radix ); В примере

Вопрос про char - C++
Пожалуйста обьясните доступным языком в чем разница между объявлениями, и какие когда лучше использовать char a; char *c; char b=new...

Исключения в конструкторах - C++
Для начала приведу код, а затем соответствующие вопросы. #include &lt;iostream&gt; #include &lt;stdexcept&gt; using namespace std; ...

Немного жестокости, о классах и конструкторах - C++
Доброго времени суток. Суть проблемы, у нас есть задача: добавить в класс конструктор по умолчанию, конструктор...

Исключения в конструкторах стандартных контейнеров - C++
Очень тупой вопрос: могут ли перемещающие конструкторы std::map и std::vector выкинуть исключение? С одной стороны, ну чему там кидать...

10
XuTPbIu_MuHTAu
Эксперт С++
2227 / 742 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
24.12.2008, 13:29 #2
знаковость/незнаковость chara не оговаривается стандартом.У большинства компиляторов он по умолчанию знаковый. Этот флаг компиляторов меняется.Но делать этого не стоит - лучше использовать unsigned char, где нужна беззнаковость.

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

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

по 2. Я догадываюсь, что там что-то связано с наследованием, но книги у меня 3 и ни в одной нету инфы по описаноому.
З.Ы. Как переопределить методы знаю, но тут выглядит как-то по другому.
0
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,766
Завершенные тесты: 1
24.12.2008, 13:47 #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 и так до бесконечности...
0
XuTPbIu_MuHTAu
Эксперт С++
2227 / 742 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
24.12.2008, 13:50 #5
WooDooMan, значений 256,просто нумеруются с нуля) поэтому 255 последнее
Cosolapiy,256,как следствие, не достигается
0
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 14:07  [ТС] #6
WooDooMan
XuTPbIu_MuHTAu
Спасибо.
Так как в асме и паскакале был гуру, то диапазоны знаю.
Согласен, но как мне тогда 255 символ вывести. Ведь цикл работает только до 254?

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

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

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

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

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

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

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

Добавлено через 5 минут 17 секунд
Хорош на эту тему. А то уже оффтопим.
0
Cosolapiy
0 / 0 / 0
Регистрация: 24.12.2008
Сообщений: 5
24.12.2008, 14:44  [ТС] #10
Vourhey
спасибо огромнейшее!
0
Lord_Voodoo
Супер-модератор
8594 / 2211 / 61
Регистрация: 07.03.2007
Сообщений: 10,766
Завершенные тесты: 1
24.12.2008, 15:55 #11
XuTPbIu_MuHTAu, да торможу... просто никогда в голову не приходило мысли длЯ цикла использовать такой коварный тип как char или unsigned char...
Код
 unsigned char a = 0;
 do{
   cout<<(int)a<<" "<< a << endl;
   if(a==255) break;
   a++;
 }while(true);
0
24.12.2008, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2008, 15:55
Привет! Вот еще темы с ответами:

Есть ли смысл в privet конструкторах и деструкторах? - C++
Ну собственно вопрос в шапке...:)

О классах и конструкторах и об операторах case c {} и без. Нюансы - C++
Зачем в С++ имеется возможность определять методы вне тела класса через разделитель ::? class green { private: int...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...


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

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

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