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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
#1

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

30.01.2012, 11:16. Просмотров 1719. Ответов 20
Метки нет (Все метки)

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
class String                    
  {
  private:
    strCount* psc;              
  public:
    String()                    // конструктор 
      { psc = new strCount("NULL"); }
//---------------------------------------------------------
    String(char* s)             // конструктор
      { psc = new strCount(s); }
//---------------------------------------------------------
    String(String& S)           // конструктор
      {    
      psc = S.psc;
      (psc->count)++;
      }
 
  };
///////////////////////////////////////////////////////////
int main()
{
  String s3 = "Муха по полю пошла, муха денежку нашла";
  return 0;
}

Подскажите при создании объекта s3 будут включены все 3 конструктора ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 11:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос запуск конструкторов (C++):

Массив из конструкторов - C++
Подскажите как создать массив из конструкторов определенного класса. Приведу пример: static int num1 = 0; ... ...

Наследование конструкторов? - C++
Сдаю лабораторную на тему наследования в С++ : #include <iostream> using namespace std; class hero { protected: int jiv; ...

Наследование конструкторов - C++
Здрасти. Такая проблема. У меня есть классы с таким наследованием: KIERUNEK-->PRZEDMIOT-->OCENA<--STUDENT Вот конструкторы класса...

Перегрузка конструкторов - C++
Добрый день знатоки С++ возник вопрос Код этой программы компилируется в CodeBlocks а на VirtualBox не компилируется , объясните...

Наследование конструкторов - C++
Вопрос по теории наследования: Есть некоторый базовый класс с двумя конструкторами типа паблик, первый без аргумента, второй с одним...

Наследование конструкторов - C++
Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса СLine создать класс CcoloredLine и класс...

20
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.01.2012, 11:23 #2
Код вообще не скомпилируется. Конструктор копии должен принимать константную ссылку.
0
Evg
Эксперт CАвтор FAQ
18026 / 6258 / 427
Регистрация: 30.03.2009
Сообщений: 17,193
Записей в блоге: 27
30.01.2012, 18:26 #3
Цитата Сообщение от 2e1553ce Посмотреть сообщение
Подскажите при создании объекта s3 будут включены все 3 конструктора ?
Воткни печать в каждый из конструкторов и подобные вопросы отпадут сами собой
0
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
30.01.2012, 19:04 #4
Цитата Сообщение от 2e1553ce Посмотреть сообщение
Подскажите при создании объекта s3 будут включены все 3 конструктора ?
будет вызван конструктор
Цитата Сообщение от 2e1553ce Посмотреть сообщение
String(char* s) // конструктор
{ psc = new strCount(s); }
LimitArE
а если точнее:то следующее аналогично:
Цитата Сообщение от 2e1553ce Посмотреть сообщение
String s3 = "Муха по полю пошла, муха денежку нашла";
C++
1
String s3=String("Муха по полю пошла, муха денежку нашла");
1
LosAngeles
Заблокирован
30.01.2012, 19:55 #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
Конструктор копии должен принимать константную ссылку.
почему должен?
0
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
30.01.2012, 20:00 #6
Цитата Сообщение от LosAngeles Посмотреть сообщение
почему должен?
По стандарту...
0
LosAngeles
Заблокирован
30.01.2012, 20:08 #7
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&,
volatile X& or const volatile X&, and either there are no other parameters or else all other parameters
have default arguments (8.3.6). [ Example: X::X(const X&) and X::X(X&,int=1) are copy constructors.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.01.2012, 20:21 #8
Например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
class obj 
{
private:
   std::string s;
public: 
   obj(const std::string _s = ""): s(_s) {};
   obj(const char s_[]): s (s_) {};
   std::string show() { return s; };  
};    
 
 
int main()
{
   obj a1, a2("abc"), a3 = "Hello world";
   std::cout << a1.show() << std::endl << a2.show() << std::endl << a3.show() << std::endl;
}
http://liveworkspace.org/code/03decdbf978fdf2fee346dfcfbecb4a6
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2012, 03:27 #9
Цитата Сообщение от LosAngeles Посмотреть сообщение
почему должен?
В данном случае должен. Ибо здесь временный объект String, созданный при помощи конструктора String(char *) (кстати, ему бы тоже неплохо принимать const char *), передаётся в конструктор копии, а тот принимает неконстантную ссылку. Временный объект не может быть принять по константной ссылке. Поэтому на вопрос "Сколько конструкторов будет запущено в примере" ответ вполне однозначный: 0.
http://liveworkspace.org/code/76aceff70b5a79f22a2a852ae9e025ba
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
31.01.2012, 04:15 #10
silent_1991, имхо ерунда.
это чисто требование gcc, чтобы КК принимал const& (неплохое требование).
http://liveworkspace.org/code/425cd252446ba08e99b8cd268bffce03
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2012, 04:49 #11
OstapBender, ничего подобного gcc не требует:
http://liveworkspace.org/code/b5df4a08a4c0f589b440543243c2a435

Добавлено через 10 минут
Здесь конструктор копии вообще не замешан. Однако если func будет принимать константную ссылку, всё скомпилируется.
http://liveworkspace.org/code/76b0d640ac202048217a554c1317bafb
0
2e1553ce
1 / 1 / 1
Регистрация: 16.12.2011
Сообщений: 47
31.01.2012, 08:48  [ТС] #12
если комменты добавить , то запускается только второй (char* s) потом все уходит на обработку в класс StrCount.
Конструктор копии запускается при таком обявлении:
C++
1
String s2(s3);
Ну и первый соответственно при :
C++
1
String s4;
Разобрался
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
31.01.2012, 09:34 #13
Цитата Сообщение от 2e1553ce Посмотреть сообщение
Подскажите при создании объекта s3 будут включены все 3 конструктора ?
Конструктор всегда один вызывается.
1
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
31.01.2012, 12:37 #14
Цитата Сообщение от silent_1991 Посмотреть сообщение
здесь временный объект String, созданный при помощи конструктора String(char *) (кстати, ему бы тоже неплохо принимать const char *), передаётся в конструктор копии, а тот принимает неконстантную ссылку.
а это к чему??

Цитата Сообщение от Chelioss Посмотреть сообщение
Конструктор всегда один вызывается.
кстати только вчера видел пример вызова из 1го конструктора - другого
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2012, 13:15 #15
Цитата Сообщение от OstapBender Посмотреть сообщение
а это к чему??
Запутался в кодах (перед глазами были разные вариант, в том числе такой String s(String("string")); )

Цитата Сообщение от OstapBender Посмотреть сообщение
пример вызова из 1го конструктора - другого
Вы о делегировании конструкторов из нового стандарта?
0
31.01.2012, 13:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2012, 13:15
Привет! Вот еще темы с ответами:

вызовы конструкторов - C++
обьясните вызов конструторов #include &lt;iostream&gt; using namespace std; class ar { int *p; int size; public:

Перегрузка конструкторов - C++
Написал прогу - в зависимости от ввода даты печатает ее в определенном формате: файл date.h #ifndef DATE1_H #define DATE1_H class...

Наследование конструкторов - C++
Здравствуйте! У меня такой вопрос: Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского? При...

Наследование конструкторов - C++
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public: aobject(int xx,int yy,int** mm)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru