FAQ:ANSI CPP — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
м (Ошибки в тегах.)
(Ветвление FAQ:ANSI CPP.)
Строка 6: Строка 6:
 
* [[FAQ:ANSI CPP:при вводе текста в переменную считываются только те символы, которые шли до пробела, а необходимо считать всю строку целиком|Как преодолеть такую ситуацию, когда при вводе текста в переменную считываются только те символы, которые шли до пробела, а мне необходимо считать всю строку целиком?]]
 
* [[FAQ:ANSI CPP:при вводе текста в переменную считываются только те символы, которые шли до пробела, а необходимо считать всю строку целиком|Как преодолеть такую ситуацию, когда при вводе текста в переменную считываются только те символы, которые шли до пробела, а мне необходимо считать всю строку целиком?]]
 
* [[FAQ:ANSI CPP:генерация случайных чисел от 0 до 1|Какую функцию нужно использовать для генерации случайных чисел от 0 до 1?]]
 
* [[FAQ:ANSI CPP:генерация случайных чисел от 0 до 1|Какую функцию нужно использовать для генерации случайных чисел от 0 до 1?]]
 
+
* [[FAQ:ANSI CPP:присвоение строки|Почему не получается присвоить строку?]]
===Почему не получается присвоить строку?===
+
* [[FAQ:ANSI CPP:передача параметров конструктору базового класса|Как из конструктора класса-наследника передать параметры конструктору базового класса?]]
Например я пишу:
+
* [[FAQ:ANSI CPP:обращение к переменной или методу базового класса|Как обратиться к переменной или методу базового класса?]]
<pre>
+
* [[FAQ:ANSI CPP:генератор псевдослучайных чисел|Стандартный генератор псевдослучайных чисел.]]
 
+
* [[FAQ:ANSI CPP:проинициализировать статический член класса|Как проинициализировать статический член класса?]]
char mess[]="";
+
* [[FAQ:ANSI CPP:задать значение константы в двоичном представлении|Как задать значение константы в двоичном представлении (т.е. единицами и нулями в виде битового поля)?]]
...
+
* [[FAQ:ANSI CPP:преобразование строки и числа|Как можно число, представленное в символьном виде, получить (или преобразовать) в виде целочисленного типа данных? И как представить число в виде массива символов (строки)? (например CString -> int  и  int -> CString)]]
mess="мой текст";//задаю значение строки
+
MessageBox(hwnd, mess,"Error Message",MB_OK);
+
</pre>
+
 
+
'''Ответ:'''
+
Массив mess объявлен как
+
  char mess[]="";
+
 
+
то есть всё равно что
+
  char mess[1]='\0';
+
 
+
размер массива равен единице, первый элемент равен 0.
+
 
+
Чтобы присвоить строку, нужно увеличить размер массива
+
(см. пример) и использовать strcpy для копирования
+
содержимого "мой текст" в mess :
+
<pre>
+
 
+
char mess[100];
+
mess[0]=0;//инициализация
+
...
+
strcpy(mess, "мой текст");
+
</pre>
+
Либо использовать std::string (стандартный класс работы
+
со строками в C++).
+
 
+
===Как из конструктора класса-наследника передать параметры конструктору базового класса?===
+
<pre>
+
 
+
//базовый класс
+
class parent
+
{
+
public:
+
parent(int n)
+
{
+
}
+
};
+
 
+
//наследник
+
class child: public parent
+
{
+
child(int n,double d): parent(n)
+
{
+
}
+
};
+
</pre>
+
===как обратиться к переменной или методу базового класса?===
+
если не вдаваться в права доступа (public,private,protected),
+
то так
+
<имя_базового_класса>::переменная;
+
<имя_базового_класса>::метод();
+
<pre>
+
class Cbase
+
{
+
protected:
+
int metod()
+
{
+
return 1;
+
}
+
};
+
+
class Cchild:public Cbase
+
{
+
int metod()
+
{
+
return 5;
+
}
+
+
void example()
+
{
+
int n;
+
+
//вызов Cchild::metod()
+
n=metod();
+
+
//вызов Cbase::metod()
+
n=Cbase::metod();
+
}
+
};
+
</pre>
+
 
+
===Стандартный генератор псевдослучайных чисел.===
+
Алгоритм генератора псевдослучайных чисел, который поставляется вместе с стандартными библиотеками С
+
<pre>
+
#define RAND_MAX 32767
+
 
+
unsigned long next=1;
+
 
+
int rand(void) {
+
next=next*1103515245+12345;
+
return((unsigned int)(next/65536)%32768);
+
}
+
 
+
void srand(unsigned int seed) {
+
next=seed;
+
}
+
</pre>
+
Источник: http://algolist.manual.ru/maths/generator/standard.php
+
===Как проинициализировать статический мембер класса?===
+
<pre>
+
class A
+
{
+
const static int m_n;
+
const static int m_Arr[];
+
};
+
+
const int A::m_n=0;
+
const int A::m_Arr[] ={1, 2, 5, 10, 20};
+
</pre>
+
===Как задать значение константы в двоичном представлении (т.е. единицами и нулями в виде битового поля)?===
+
можно использовать макросы, например:
+
<pre>
+
//МАКРОСЫ ДЛЯ ДВОИЧНЫХ ЧИСЕЛ
+
+
//байт
+
#define _b8(b) ((BYTE)(\
+
(b&0x10000000?0x80:0)|(b&0x01000000?0x40:0)|\
+
(b&0x00100000?0x20:0)|(b&0x00010000?0x10:0)|\
+
(b&0x00001000?0x08:0)|(b&0x00000100?0x04:0)|\
+
(b&0x00000010?0x02:0)|(b&0x00000001?0x01:0)))
+
//слово
+
#define __b16(b16) ((WORD)((_b8(((unsigned __int64)b16)>>32)<<8)|(_b8(b16))))
+
//двойное слово
+
#define __b32(b16H,b16L) ((DWORD)(((__b16(b16H))<<16)|(__b16(b16L))))
+
+
+
+
//пример:
+
BYTE by;
+
by=_b8(0x01010110);// ==0x56
+
by=_b8(0x111);// ==7
+
+
WORD w;
+
w=__b16(0x0111011011010011);//==0x76d3
+
+
DWORD dwd;
+
dwd=__b32(0x0101010110110011,0x0101111011010001);//==0x55B35ED1
+
dwd=__b32(0x1000101110101010,0x11010101);//==0x8BAA00D5
+
</pre>
+
===Как можно число, представленное в символьном виде, получить (или преобразовать) в виде целочисленного типа данных? И как представить число в виде массива символов (строки)? (например CString -> int  и  int -> CString)===
+
<pre>
+
CString txt;
+
int n;
+
...
+
txt="1234";
+
n=atoi(txt); //CString -> int
+
...
+
n=1234;
+
txt.Format("%d",n);//  int -> CString
+
</pre>
+
  
 
[[Category:FAQ]]
 
[[Category:FAQ]]

Версия 22:11, 28 июля 2008