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

запуск конструкторов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевисти код http://www.cyberforum.ru/cpp-beginners/thread437830.html
#include <iostream.h> #include <stdlib.h> void show(float **a,int n); void fill(float **a,int n); void fill_t(float **a,int n); float scalyar(float **a,float **b,int col1,int col2,int n); void ort(float **a,float **r,float **t,int n); void multiply(float **r,float **t,float **ans,int n); void get_r_mat(float **a,float **r,float **t,int col,int n);
C++ Как составить алгоритм??? 1.вызываем ipMatr(); 2.вызываем. оpMatr(); 3.Прямой ход гаусса как его описать формулами? void main(void) {double aa,bb; ipMatr(); for(opMatr(),k=0;k<=n;k++) //прямой ход метода Гаусса; { aa=fabs(a); http://www.cyberforum.ru/cpp-beginners/thread437824.html
C++ Запись в файл
Доброе утро. Прошу подсказать и по возможности помочь. Есть ли возможность хранить двухмерную матрицу в самом откампилированном файла (exe) Матрица будет постоянно изменяться и что-бы данные хранились в самом же exe файле ? Заране спасибо Добавлено через 6 часов 44 минуты Записать в бинарный файл можно вот по этой статье http://c.guti.ru/binarn.asp
C++ Генерация текста программы по диаграммам Варнье-Орра для полного входа.
Помогите пожалуйста!! У меня ни чего не получается!! Как с этим быть.
C++ Классы http://www.cyberforum.ru/cpp-beginners/thread437767.html
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd, bufwr; unsigned char tx_index, rx_index; public: void open(); void close();
C++ LAN и консольное приложение Здравствуйте, заинтересовал такой вопрос: а можно ли написать 2 приложения на С++ и между ними что-то типа чата.. 1й клиент отправляет сообщения 2му, а второй 1му, ? и вообще, на с\с++ есть возможность работы с сетью? я в этом новичек, поэтому пока прошу ответить , есть ли шансы.. ну и если да, то.. что посоветуете почитать на эту тему? подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
31.01.2012, 21:20     запуск конструкторов
Цитата Сообщение от 2e1553ce Посмотреть сообщение
если комменты добавить , то запускается только второй (char* s) потом все уходит на обработку в класс StrCount.
Конструктор копии запускается при таком обявлении:
C++
1
String s2(s3);
Ну и первый соответственно при :
C++
1
String s4;
Разобрался
Увы, вы преждевременно радуетесь, что вы разобрались. На самом деле у вас некорректные представления.
Итак, рассмотрим предложение создания вашего объекта

C++
1
  String s3 = "Муха по полю пошла, муха денежку нашла";
Ваш объект типа String не может инициализироваться символьным литералом. Поэтому в вашем классе ищется конструктор, который преобразует символьный литерал в объект класса String. Такому конструктору соответствует конструктор вида String(char* s). После того, как объект класса String для выражения инициализации, стоящего в правой части знака = создан, вызывается конструктор копирования String(String(char* s)). Итак, строка

C++
1
  String s3 = "Муха по полю пошла, муха денежку нашла";
соответствует вызову двух конструкторов, то есть эквивалетна предложению

C++
1
String s3( String( "Муха по полю пошла, муха денежку нашла" ) );
Вы сейчас будете мне возражать, что вы посмотрели с помощью режима отладки, и у вас на самом деле вызвался один конструктор String(char* s).вместо двух конструкторов String(String(char* s)), как я это утверждаю.

Дело в том, что для обспечения оптимизации стандарт С++ позволяет создавать временный объект в области памяти создаваемого объекта, а потому конструктор копирования разрешается опустить. То есть стандарт С++ разрешает, что когда запускается выражение String(char* s)., то не создается временный объект, который затем является операндом конструктора копирования, а создается объект сразу в памяти, выделенной объекту s3. Но чтобы вы убедились, что наличие и доступность конструктора копирования все равно требуются, проведите такой тест: сделайте конструктор копирования закрытым и попробуйте запустить вашу программу. То есть в вашем классе поставьте объявление конструктора копирования String(String& S) в секцию private вашего класса, и вы увидите, что к вашему удивлению программа не будет компилироваться, хотя конструктор, тот, один, String(char* s), который вы считали запускается, по-прежнему является открытым членом вашего класса. String .
Это означает, что в вашем примере должны запускаться два конструктора, но в целях обспецения оптимизации стандарт С++ разрешает опускать запуск конструктора копирования, так как, фактически, оба конструктора делают одну и ту же инициализациию создаваемого объекта, а потому излишне создание временного объекта, а затем с помощью него инициализировать ваш создаваемый объект. Но при этом конструктор копирования все равно должен быть доступен для вызова, иначе вы не сможете создать свой объект, так как формально должны вызываться два конструктора, как былло указано в начале.
 
Текущее время: 08:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru