Форум программистов, компьютерный форум CyberForum.ru

Повторный вызов конструктора?! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка чисел http://www.cyberforum.ru/cpp-beginners/thread930025.html
Всем добрый вечер! Прошу вашего прощения за тупость,и помощи. Мне было поставлено несложное задание на плюсах, но столкнулся с проблемой В написании одного алгоритма - сказывается нехватка знаний. Мне нужен алгоритм, сортирующий (не подходящее слово, но не могу подобрать лучше) числа. Дан матрица, предположим 5*5. Заполнена полностью нулями. Используется двоичная с/с. Нужно чтоб были...
C++ Крестики-нолики, проверка Подскажите пожалуйста как тут реализовать проверку по прямой и по диагонали? #include <iostream> #include <cmath> using namespace std; class Board { protected: http://www.cyberforum.ru/cpp-beginners/thread930012.html
C++ функия NtCreateUserProcess
как использоват эту функцию и какие параметры надо передавать заранее спасибо
Искусственный интелект для игры C++
Подскажите, есть ли современные игры, для которых можно писать интеллект, или игра которая и состоит в том, что бы писать интеллект. Главное не супер качество графики, и еще что либо, а что бы было интересно, и людей было много. Сам искал, но не нашел. Помогите, чем можете.
C++ Объявление переменных в С++ http://www.cyberforum.ru/cpp-beginners/thread929989.html
Начал изучение С++ и возник такой вопрос как повторно производить действия с переменными после их объявления?
C++ Работа с back_inserter(); Почему в алгоритме copy() я не могу использовать back_inserter()? #include <iostream> #include <iterator> #include <vector> #include <deque> #include <algorithm> #include <list> #include <set> #include "my_iterator.h" подробнее

Показать сообщение отдельно
CatsCanFly
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 21
28.07.2013, 20:46     Повторный вызов конструктора?!
Мой небольшой класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class CString
{
private:
    char* str;
    int len;
    int real_size;
public:
    CString() : len(0), real_size(10)
    {
        this->str = (char*)malloc(this->real_size * sizeof(char));
    }
 
    CString(char str_arg[])
    {
        this->len = char_arr_length(str_arg);
        this->real_size = this->len + 10;
        this->str = (char*)malloc(this->len * sizeof(char));
        this->set(str_arg);
    }
 
    CString* set(char str_arg[])
    {
        for(int i = 0; str_arg[i] != 0; i++)
        {
            this->str[i] = str_arg[i];
        }
        str[this->len] = 0;
        return this;
    }
 
private:
    int char_arr_length(char str_arg[])
    {
        int i;
        for(i = 0; str_arg[i] != 0; i++);
        return i;
    }
 
    friend ostream & operator << (ostream & output, CString & _str)
    {
        output << _str.str;
        return output;
    }
};
Как понимаю, одноаргументные конструкторы можно вызывать как будто это присваивание:
C++
1
2
CString str = "test";
cout<<str;
Естественно , все работает, но мое удивление вызвало :
C++
1
2
3
CString str = "test";
str = "test2";
cout<<str;
- Тоже работает. Оператор присваивания для класса не перегружен. Притом что если явным образом еще раз вызвать конструктор от этого объекта, компилятор конечно ругается. Объясните пожалуйста, что здесь вообще тогда происходит? Еще раз вызывается конструктор и создается новый объект, а старый продолжает висеть в памяти и ссылка на него теряется?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru