Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не пойму как работает класс 
:(
    Опции темы
Lotles
Дата 4.8.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Hi all
Не пойму как работает пример

Вот весь код
Код

#include <stdafx.h>
#include <conio.h>
using namespace std;
class String {
public:
    char* ptr;
    String(char* s){
    int n = strlen(s);
    ptr = new char[n + 1];
    strcpy(ptr, s);
    }
    String(){
        ptr=new char[1];
        ptr[0]='\0';
    }
    ~String(){
    delete [] ptr;
}
    int operator==(const String &other){
    return (strcmp(ptr, other.ptr) == 0);
    }
    operator char*() {
                return ptr;
    }
};
int main() {
    String a("STRING 1");
    String b("STRING 2");
    String c;                
    cout << "The value of a is: " << endl;
    cout << a << endl;
    cout << "The value of b is: " << endl;
    cout << b << endl;
    cout << "The value of c is between these brackets<";
    cout << c << ">" << endl;
}


Вот выражение
Код

    String a("STRING 1");

После него выполняется это
Код

    String(char* s){
    int n = strlen(s);
    ptr = new char[n + 1];
    strcpy(ptr, s);

т.е для указателя ptr выделяется память под строку
"STRING 1", указатель указывает на эту память и размещаем в этой памяти строку "STRING 1"

Далее
Код

    String b("STRING 2");

После него выполняется это
Код

    String(char* s){
    int n = strlen(s);
    ptr = new char[n + 1];
    strcpy(ptr, s);

т.е для указателя ptr выделяется память под строку
"STRING 2", указатель указывает на эту память и размещаем в этой памяти строку "STRING 2"(т.e указатель уже указывает не на "STRING 1", а на "STRING 2")

Далее 
Код

    String c;    

Ну тут аналогично

Далее
Код

    cout << a << endl;

После него выполняется это
Код

    operator char*() {
    return ptr;


Главный вопрос
Почему возвращается строка "STRING 1", ведь указатель указывает на память для строки "c"-    String c ?

Книгу читаю C++ без страха, что то так как то не понятно написано !





Это сообщение отредактировал(а) Lotles - 4.8.2010, 22:38
PM MAIL Skype   Вверх
Cheloveck
Дата 4.8.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



2 объекта, 2 указателя.

Цитата(Lotles @  4.8.2010,  22:26 Найти цитируемый пост)
Книгу читаю

Читай лучше =)


--------------------
user posted image
PM Jabber   Вверх
Lotles
Дата 4.8.2010, 23:42 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Нормольно напишите какие указатели и объекта не 2 а 3
PM MAIL Skype   Вверх
toxx
Дата 5.8.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



почитай про конструкторы, наверно тема в книге именно такая
PM MAIL   Вверх
Lotles
Дата 5.8.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Немного сам разобрался пришел к такому вопросу
Код

cout << a << endl;
operator char*() {
return ptr;
 // как компилятор узнает какой ptr возвратить, их же несколько 
PM MAIL Skype   Вверх
toxx
Дата 5.8.2010, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



Lotles
ну наверно в памяти объект создает со своим адресом? и по этому адресу он и узнает?
PM MAIL   Вверх
djamshud
Дата 5.8.2010, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Эммм. Вы создаете три объекта с тремя разными ptr внутри. Для каждого из объектов (a,b,c) будет возвращен свой ptr. А то как вы думаете, но то, как в данном случае совсем не нужно, достигается с помощью статичего (static) ptr.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.