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

Почему конструктор вызывается повторно при преобразовании типов? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ uint32 и UINT64 http://www.cyberforum.ru/cpp-beginners/thread809424.html
Господа, не подскажете ли, какие магические слова надо написать, чтобы начать использовать тип uint32? Мне не важно, как он называется (то есть советы про #define не нужны), я могу легко...
C++ поиск в файле Есть текстовый файл. Нужно в нем найти исходную комбинацию двух букв и заменить эти две буквы, теми двумя символами, которые стоят после этой комбинации, и эти 2 символа записать в новый файл. ... http://www.cyberforum.ru/cpp-beginners/thread809419.html
Вычислить значение выражения C++
Написать самостоятельно программу для вычисления выражения для своего варианта: w=2bccos(a/2)/(b+c) #include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; int main()...
Число сочетаний из n по k C++
Машинно ориентированное программирование.вычислить число сочетаний из н по к
C++ long long r char[] __int64 http://www.cyberforum.ru/cpp-beginners/thread809386.html
Добрый день возник следующий вопрос: мне требуется преобразовать тип long long в char, при этом код должен быть переносимым (т.е. мне надо чтобы программа заработала и под Visual Studio и на UNIX с...
C++ Разработать программу,позволяющую вводить данные с клавиатуры и выводить их на экран с простейшим форматированием Помогите, пожалуйста, с программой. В задание сказано: разработать программу,позволяющую вводить данные с клавиатуры и выводить их на экран с простейшим форматированием. Входные данные:6 полных... подробнее

Показать сообщение отдельно
Bredorub
5 / 5 / 0
Регистрация: 16.01.2011
Сообщений: 94

Почему конструктор вызывается повторно при преобразовании типов? - C++

15.03.2013, 16:30. Просмотров 413. Ответов 5
Метки (Все метки)

В качестве примера предлагаю рассмотреть примерчик из учебника.
В примере мы создаём класс, содержащий в качестве поля строку символов и определяем метод для преобразования объекта класса в строку.
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
#include <iostream>
using namespace std;
#include <cstring>
//***************************************************************************
class String
{
    private:
        enum {SZ = 80};
        char str[SZ];
    public:
        String ( ) {                    // Конструктор без аргументов.
            str[0] = '\x0';
        }
        String (const char s[] ) {        // Конструктор с одним аргументом.
            strcpy (str, s);
        }
        void display ( ) const {
            cout << str;
        }
        operator char* ( ) {          // Из объекта в строку.
            return str;
        }  
};
//***************************************************************************
 
//---------------------------------------------------------------------------
int main()
{
    String s1;       // Объявляем объект.
 
    char xstr[] = "Kakoy-nibud' tekst";
 
    s1 = xstr;       // Здесь используется конструктор. Компилятор не жалуется 
                        // на отсутствие преобразования строки в объект класса.
 
    s1.display();
    
    return 0;
Когда мы объявляем объект впервые, запускается конструктор без аргументов. Затем, при присваивании строки тому же объекту снова запускается конструктор (хотя уже и другой) несмотря на то, что объект уже был создан. Собственно, почему так происходит? Ведь конструктор должен вызываться лишь один раз при создании объекта...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru