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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dec to 17ную, Перевести из десятичной в 17чную систему 
:(
    Опции темы
Леопольд
Дата 25.7.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zim22 @ 25.7.2009,  11:46)
разрешён.
Код

S s1 = S(10);

запрещён
Код

struct S{
    S(void) {}
    explicit S(S const&) {}
};

int main(void){
    S s1 = S(); // error
}


Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:24


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 25.7.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Леопольд @  25.7.2009,  12:14 Найти цитируемый пост)
запрещён

Да smile но не только по причине explicit copy constructor -а, еще надо default constructor определить.
PM   Вверх
Леопольд
Дата 25.7.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zim22 @ 25.7.2009,  12:08)
Код

S s1 = 10;
S s2 = s1;

Это вызовы разных конструкторов.
Код

S s0(10);
S s1 = 10;

А это одного и того же.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Gordon
Дата 25.7.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не, ну так понятно, а если что-то вроде этого: 

Код

class A
{
    public:
        A() : i() { cout << "A()" << endl; }
        A(int n) : i(n) { cout << "A(int)" << endl; }
        ~A() { cout << "~A()" << endl; }
        
    private:
        A& operator =(const A &a)
        {
            cout << "operator =" << endl;
            this->i = a.i;
            return *this;
        }
        A(const A&) {cout << "A(A&)" << endl; }

        int i;
};



--------------------

  
     
PM MAIL WWW   Вверх
Леопольд
Дата 25.7.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @ 25.7.2009,  12:20)
Да smile но не только по причине explicit copy constructor -а, еще надо default constructor определить.

Угу, точно. Поправил.

Добавлено @ 12:28
Цитата(Gordon @ 25.7.2009,  12:23)
не, ну так понятно, а если что-то вроде этого:

Здесь запрет копирования.
Код

int main(void){
    A a0(0);
    A a1 = 1; // error
 }

Код

main.cpp||In function ‘int main()’:|
main.cpp|47|ошибка: ‘A::A(const A&)’ is private|
main.cpp|53|ошибка: в данном контексте|
||=== Build finished: 2 errors, 0 warnings ===|

Пытается вызвать конструктор копирования... zim22 прав


Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:33


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
zim22
Дата 25.7.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(Леопольд @  25.7.2009,  12:14 Найти цитируемый пост)
запрещён

smile "Copy" на экран выводится? Какой из этого можно сделать вывод?
Код

struct S{
    S() {}
     S(S const&) { std::cout << "Copy"; }
};
int main() {
  S s = S();
}




--------------------
PM MAIL   Вверх
azesmcar
Дата 25.7.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Леопольд, 
zim22, 

Я чего-то не пойму о чем вы smile 
Леопольд примеры с explicit показывает, вы - без..и спорите о чем-то? О чем? smile 
PM   Вверх
zim22
Дата 25.7.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(azesmcar @  25.7.2009,  12:39 Найти цитируемый пост)
Я чего-то не пойму о чем вы

посты набиваю smile


--------------------
PM MAIL   Вверх
Леопольд
Дата 25.7.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(azesmcar @ 25.7.2009,  12:39)
О чем? smile

В чём разница между
1. type obj(val);
2. type obj = val;

Он мне напомнил что второй вариант, это неявный вызов конструктора копирования.


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Gordon
Дата 25.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Леопольд @  25.7.2009,  13:24 Найти цитируемый пост)
Здесь запрет копирования.КодincludeSyntax('cpp');int main(void){    A a0(0);    A a1 = 1; // error }


У меня такой код работает!

Код

class A
{
    public:
        A() : i() { cout << "A()" << endl; }
        A(int n) : i(n) { cout << "A(int)" << endl; }
        ~A() { cout << "~A()" << endl; }
        
    private:
        A& operator =(const A &a)
        {
            cout << "operator =" << endl;
            this->i = a.i;
            return *this;
        }
        A(const A&) {cout << "A(A&)" << endl; }

        int i;
};

int _tmain(int argc, _TCHAR* argv[])
{             
    A a = 5; // и это работает!
    A a1(5);

    system("pause");
    return 0;
}


А вот такое создание уже не работает!
Код

A a2 = A(5);


Это сообщение отредактировал(а) Gordon - 25.7.2009, 12:44


--------------------

  
     
PM MAIL WWW   Вверх
azesmcar
Дата 25.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(zim22 @  25.7.2009,  12:40 Найти цитируемый пост)
посты набиваю smile 

Ай ай ай...совсем забыл..розыгрыш призов уже скоро.  smile 
PM   Вверх
zim22
Дата 25.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(Леопольд @  25.7.2009,  12:42 Найти цитируемый пост)
 это неявный вызов конструктора копирования.

компиляторы могут так соптимизировать код, что конструктор копирования вызываться не будет. что собственно и происходит.
Цитата(Gordon @  25.7.2009,  12:43 Найти цитируемый пост)
У меня такой код работает!

здорово! smile
http://codepad.org/gncCk9z6

Это сообщение отредактировал(а) zim22 - 25.7.2009, 12:45


--------------------
PM MAIL   Вверх
azesmcar
Дата 25.7.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Леопольд @  25.7.2009,  12:42 Найти цитируемый пост)
1. type obj(val);
2. type obj = val;


Леопольд

Ну это все ясно, а спор о чем? smile
PM   Вверх
Леопольд
Дата 25.7.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gordon @ 25.7.2009,  12:43)
У меня такой код работает!

Это Visual Studio.

Добавлено @ 12:48
Цитата(azesmcar @ 25.7.2009,  12:45)
Ну это все ясно, а спор о чем? smile

Уже ни о чём, zim22 выиграл smile

Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:58


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Gordon
Дата 25.7.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



zim22, в код:

Код

type obj(val);
type obj = val;


может компилироваться по разному, в зависимости от компилятора, так получается?!

Добавлено @ 12:54
Цитата(Леопольд @  25.7.2009,  13:47 Найти цитируемый пост)
Это Visual Studio.


Да, она самая!  smile

Добавлено @ 12:56
Короче, лучше по воможности писать так:

Код

type obj(val);


чтобы не надеяться на компилятор! Да?

Это сообщение отредактировал(а) Gordon - 25.7.2009, 13:01


--------------------

  
     
PM MAIL WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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