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

Присваивание конструктором копирования - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ системный переменные http://www.cyberforum.ru/cpp-beginners/thread155160.html
как получить адрес папки Винды в програму а также адрес папки из которой програма запущена?
C++ абстрактный класс не компилирует abcd.cpp //abcd.h #include <cstring> #ifndef _ABCD_H_ #define _ABCD_H_ class ABCd { private: char performers; char label; http://www.cyberforum.ru/cpp-beginners/thread155150.html
C++ Учебник по с, а не по с++.
Где можно скачать хороший учебник по с, а не по с++. Что то наподобие для чайников.
C++ В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке
/*Дана матрица А. В каждой строке матрицы найти и вывести минимальный элемент и его номер в строке. Вывести полученную матрицу.*/ #include <iostream> using namespace std; int main() { int i,j,a,min,mi,mj,m; cout << "Vedite matricy A" << endl; for (i=0;i<5;i++)
C++ Какую библиотеку использовать? http://www.cyberforum.ru/cpp-beginners/thread155084.html
Только начал изучение Си. Нужно написать программу, которая выводит сегодняшнюю дату в формате дд.мм.гггг Собственно, вопрос в сабже :-) Буду признателен за помощь.
C++ Дан набор координат точек. Начиная с первой, проложить кратчайший маршрут.... Дан набор координат точек. Начиная с первой, проложить кратчайший маршрут, который позволил бы посетить их все по одному разу. Построить графическое изображение маршрута? подробнее

Показать сообщение отдельно
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
30.11.2010, 00:42     Присваивание конструктором копирования
Цитата Сообщение от ForEveR Посмотреть сообщение
Я уже показал. Явные создавать можно, неявные - нет.
все нашел, и разобрался сразу по двум пунктам, так как ссылки нельзя кидать кину основной момент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class sss
{
public:
  explicit sss( int ) {
    std::cout << "int" << std::endl;
  };
 
  sss( double ) {
    std::cout << "double" << std::endl;
  };
};
 
int main()
{
 sss ddd(7);
 sss xxx = 7;
 
 return 0;
}
Известно, что все целые числа по стандарту автоматически имеют тип int, если иного явно не указано. Т.е. число 7 в примере выше имеет тип int. Поэтому, кажется на первый взгляд, что в обоих случаях будет вызван конструктор принимающий int. Однако, это не так.

Запись вида «sss ddd( 7 );» является явным вызовом конструктора, а «sss xxx = 7;» — неявным. Если бы конструктор с int был в private секции, то была бы выдана ошибка. Но ключевое слово explicit скывает конструктор так незаметно, что даже предупреждения компилятор не выдаст. Если скомпилировать и запустить пример, то окажется, что во втором случает будет вызван конструктор, принимающий double. Это может оказаться довольно неожиданным поворотом событий, если не разбираться в формах вызовов конструкторов. Часто разработчики не придают особого значения как они конструируют объект.

Если написать explicit для обоих конструкторов, то ошибки можно будет избежать — компилятор подскажет где ошибка. Поэтому explicit следует писать для всех конструкторов с одним параметром, если специально не предполагается другое поведение. Мне кажется, что это стоило делать по умолчанию в стандарте, а для других случаев ввести что-то вроде nonexplicit.
 
Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru