Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 02:34   #1
lebedun
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 12
По умолчанию FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); }

В одной из книг встретил код:

Код:
// faststring.h
class FastString {
char *m_psz;
public:
FastString(const char *psz);
~FastString(void);
int Length(void) const;
// returns # of characters
// возвращает число символов
int Find(const char *psz) const;
// returns offset
//возвращает смещение
};



// FastString.cpp
#include "faststring.h"
#include <string.h>

FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1])
{ strcpy(m_psz, psz); }

FastString::~FastString(void)
{ delete[] m_psz; }

int FastString::Length(void) const
{ return strlen(m_psz); }

int FastString::Find(const char *psz) const
{
//O(1) lookup code deleted for> clarity1
// код поиска 0(1) удален для ясности
}
Подскажите пожалуйста. Не могу понять строку FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); } , а точнее что это за двоеточие и то что за ним следует. Перерыл все. Так и не нашел.

Последний раз редактировалось MaTBeu; 27.03.2009 в 23:46.
lebedun вне форума Ответить с цитированием
Старый 27.03.2009, 02:58   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Код:
FastString::FastString(const char *psz) : /*Инициализация членов класса*/ m_psz(new char [strlen(psz) + 1])
{ strcpy(m_psz, psz); }
FastString::FastString(const char *psz) - ваша функция(функция - метод класса).
После двоеточия идет предопределение(инициализация аргументов) - выделение памяти в m_psz(это член класса).

Ну а дальше функция копирует строку из аргуметов в строку - член класса.
Вот для примера, есть у вас класс:

Код:
class CText
{
int a; 
int b;
int c; 
CText(); //Конструктор класса.
~CText(); //Деструктор класса.
}
//Предопределение конструктора: 
//Что бы не писать в теле конструктора - можно навесить 
//инициализацию членов класса.
CText::CText() : a(1), b(2),c(3)
{
//Код конструктора. 
}
Таким образом при создании объекта(экземпляра класса) все члены класса уже будут инициализированы:
a=1
b=2
c=3

Это такая синтаксическая уловка
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 27.03.2009 в 03:02.
Ivan_32 вне форума Ответить с цитированием
Старый 27.03.2009, 03:10   #3
lebedun
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 12
По умолчанию

Спасибо!!!
Зачем нужен такой синтаксис если это можно выполнить просто записав
a=1;
b=2;
c=3;
в фигурных скобках конструктора?
Давно ли такой синтаксис стал использоваться? Я не встречал нигде пояснений насчет этого.
lebedun вне форума Ответить с цитированием
Старый 27.03.2009, 03:43   #4
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

В обще такая запись предназначена для предопределения конструкторов в теле класса, для случаев когда в теле конструктора кроме инициализации ничего нет. Для примера:

Код:
class ClsExample
{
int a,b,c,d,e,f;
ClsExample():a(0),b(1),c(2),d(3),e(4),f(5)
}

Согласитесь ведь более удобочитаемо чем: 
class ClsExample
{
int a,b,c,d,e,f;
ClsExample()
{
   a=0;
   b=1;
   c=2;
   d=3;
   e=4;
   f=5;
}
}
Допустим когда таких элементов штук 10 это еще не критично, а что если их штук 20?) Вот тут то на помощь придет такая запись
К тому же С++ это язык больших возможностей, на нем много разных стилей есть А Макросы #define помогут расширить эти стили
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось MaTBeu; 27.03.2009 в 23:46.
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
char в wchar_t softrix Общие вопросы C/C++ 5 08.11.2010 15:40
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
отличие char* str ="..." от char ...[]="..." StarWorm Общие вопросы C/C++ 2 20.11.2008 08:48
из char в int?? Mika Общие вопросы C/C++ 4 20.06.2008 15:18
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17