Функция-член класса Х, имя которой имеет вид operator <имя типа>, определяет преобразование из Х в тип, заданный именем типа. Такие функции называются преобразующими функциями или функциями приведения.
Для такой функции не могут быть заданы ни параметры, ни возвращаемый тип.
class X
{ private:
int x;
public:
X(int n);
operator int();
...
};
X::X(int n) { x = n; }
X::operator int() { return x; }
int a;
X b(0);
| |
a = (int)b;
| // Явный вызов преобразующей функции
|
a = b;
| // Неявный вызов преобразующей функции
|
2 вопрос
Операция new
В С++ предлагается другой подход к выделению памяти: операция new. Это - универсальная операция, которая получает память у операционной системы и возвращает указатель на начало выделенного блока. В следующей программе продемонстрировано, как это работает:
| using namespace std;
|
| int main ()
|
| {
|
| char* str = "Очень длинная строка.";
|
| int len = strlen (str); // вычисление длины строки
|
| char* ptr; // определим переменную
|
| ptr = new char [ len +1 ]; // выделяем память, используя оператор new
|
| strcpy (ptr, str); // копируем str у ptr
|
| | | |
| cout<< "ptr = " << ptr << endl; // содержание ptr
|
| delete [] ptr; // освобождение выделенной памяти, оператор delete
|
Выражение
ptr = new char [ len + 1 ];
|
присваивает переменной ptr значение адреса блока памяти, достаточного для сохранения строке str, длину которого можно получить, используя библиотечную функцию
strlen(), добавив дополнительный байт для символа окончания строки.
Результат работы программы:
ptr = Очень длинная строка.
|