Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 99

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Новый стандарт Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ использованиС списков ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктора, позволяя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкторы (delegating constructor). Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор своСго класса. Он "Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚" Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (ΠΈΠ»ΠΈ всС) свои Π·Π°Π΄Π°Ρ‡ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ конструктору.

Подобно Π»ΡŽΠ±ΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ конструктору, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈΠΌΠ΅Π΅Ρ‚ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² ΠΈ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Бписок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ конструктора содСрТит элСмСнт, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ самого класса. Подобно Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ² класса, имя класса сопровоТдаСтся Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Π² скобки списком Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Бписок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ конструктору Π² классС.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ класс Sales_data Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкторы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

class Sales_data {

public:

 // Π½Π΅Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…

 // Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

 Sales_data(std::string s, unsigned cnt, double price):

            bookNo(s), units_sold(cnt), revenue(cnt*price) { }

 // всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ конструкторы Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ конструктору

 Sales_data(): Sales_data("", 0, 0) {}

 Sales_data(std::string s): Sales_data(s, 0, 0) {}

 Sales_data(std::istream &is): Sales_data()

 { read(is, *this); }

 // Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΆΠ΄Π΅

}

Π’ этой вСрсии класса Sales_data всС конструкторы, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ конструктор ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ… для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…-Ρ‡Π»Π΅Π½ΠΎΠ², Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Π’ этой вСрсии класса ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ стандартный конструктор, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктор Π½Π° Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Он Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, поэтому Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎ пусто. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ строку, Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ вСрсии Π½Π° Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ istream&, Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ свои дСйствия. Он Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… стандартному конструктору, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… конструктору Π½Π° Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эти конструкторы Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, запускаСтся Ρ‚Π΅Π»ΠΎ конструктора с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ istream&. Оно Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ read() для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° istream.

Когда конструктор Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ конструктору, список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚Π΅Π»ΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ конструктора Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ±Π°. Π’ классС Sales_data Ρ‚Π΅Π»Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… конструкторов пусты. Если Π±Ρ‹ Ρ‚Π΅Π»Π° конструкторов содСрТали ΠΊΠΎΠ΄, Ρ‚ΠΎ ΠΎΠ½ выполнялся Π±Ρ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΊ Ρ‚Π΅Π»Ρƒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ конструктора.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 7.5.2

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.41. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ класса Sales_data, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ конструкторы. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ‚Π΅Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ конструктора ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, выводящий сообщСниС всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ выполняСтся. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ объявлСния для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Sales_data Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ способами. Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ порядок выполнСния Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… конструкторов.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.42. Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ классу, написанному для упраТнСния 7.40 Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 7.5.1, ΠΈ Ρ€Π΅ΡˆΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· Π΅Π³ΠΎ конструкторов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Если Π΄Π°, Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор (конструкторы) для своСго класса. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС рассмотритС список абстракций ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Ρƒ, которая, ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ, использовала Π±Ρ‹ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ конструктор. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса для этой абстракции.

7.5.3. Роль стандартного конструктора

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ конструктор автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ инициализируСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ осущСствляСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ случаС.

β€’ ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ нСстатичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1) ΠΈΠ»ΠΈ массивов (см. Ρ€Π°Π·Π΄Π΅Π» 3.5.1) Π² области видимости Π±Π»ΠΎΠΊΠ° Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ².

β€’ ΠšΠΎΠ³Π΄Π° класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ синтСзируСмый стандартный конструктор (см. Ρ€Π°Π·Π΄Π΅Π» 7.1.4).

β€’ ΠšΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠ° класса Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ явно Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктора (см. Ρ€Π°Π·Π΄Π΅Π» 7.1.4).

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ осущСствляСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ случаС.

β€’ Π’ΠΎ врСмя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива, ΠΊΠΎΠ³Π΄Π° прСдоставляСтся мСньшС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Π΅ΠΌ элСмСнтов массива (см. Ρ€Π°Π·Π΄Π΅Π» 3.5.1).

β€’ ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ локального статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° (см. Ρ€Π°Π·Π΄Π΅Π» 6.1.1).

β€’ ΠšΠΎΠ³Π΄Π° явно Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ инициализация Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ΅ выраТСния Π’(), Π³Π΄Π΅ T β€” это имя Ρ‚ΠΈΠΏΠ°. (ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° (см. Ρ€Π°Π·Π΄Π΅Π» 3.3.1), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ этого Π²ΠΈΠ΄Π° для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ своСго элСмСнта.)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² этих контСкстах, Ρƒ классов Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ стандартный конструктор. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ этих контСкстов Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ.

Однако Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ влияниС Π½Π° классы, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π±Π΅Π· стандартного конструктора:

class NoDefault {

public:

 NoDefault(const std::string&);

 // Π΄Π°Π»Π΅Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… конструкторов

};

struct А { // my_mem являСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ; см. Ρ€Π°Π·Π΄Π΅Π» 1.2

 NoDefault my_mem;

};

А Π°;       // ошибка: Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ синтСзируСмый конструктор для А

struct Π’ {

 Π’() {}    // ошибка: Π½Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для b_member

 NoDefault b_member;

};

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ стандартный конструктор, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ конструкторы.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ стандартного конструктора

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° obj компилируСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Но ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΅Π³ΠΎ использования компилятор ТалуСтся Π½Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ синтаксиса доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ.

Sales_data obj(); // ok: Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функция, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

if (obj.isbn() == Primer_5th_ed.isbn()) // ошибка: obj - функция

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, нСсмотря Π½Π° Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ obj, фактичСски Π±Ρ‹Π»Π° объявлСна функция Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Sales_data.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ стандартный конструктор для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, слСдуСт ΡƒΠ±Ρ€Π°Ρ‚ΡŒ пустыС ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки:

// ok: obj - ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Sales_data obj;

РаспространСнной ошибкой срСди Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Π‘++ являСтся объявлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ стандартным конструктором, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Sales_data obj(); // упс! Π­Ρ‚ΠΎ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Sales_data obj2;  // ok: obj2 - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π½Π΅ функция

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 7.5.3

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.43. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, имССтся класс NoDefault, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ конструктор, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° int, Π½ΠΎ Π½Π΅Ρ‚ стандартного конструктора. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ класс Π‘, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ пСрСмСнная-Ρ‡Π»Π΅Π½ Ρ‚ΠΈΠΏΠ° NoDefault. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ стандартный конструктор для класса Π‘.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.44. Допустимо Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС? Если Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

vector<NoDefault> vec(10);

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.45. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€, содСрТащий ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Π‘ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ упраТнСния?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.46. ΠšΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ΅ имССтся, Π»ΠΎΠΆΠ½ΠΎ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

(a) ΠšΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ конструктор.

(b) Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ конструктор β€” это конструктор с пустым списком ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

(c) Π•сли для класса Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ стандартный конструктор.

(d) Π•сли класс Π½Π΅ опрСдСляСт стандартный конструктор, компилятор сам создаСт конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

7.5.4. НСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² класса

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.11, язык Π‘++ автоматичСски осущСствляСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встроСнных Ρ‚ΠΈΠΏΠΎΠ². ΠžΠ±Ρ€Π°Ρ‰Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ классы Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ нСявныС прСобразования. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ с ΠΎΠ΄Π½ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, опрСдСляСт нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‚ΠΈΠΏ класса. Π’Π°ΠΊΠΈΠ΅ конструкторы ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ ΠΊΠ°ΠΊ конструкторы прСобразования (converting constructor). ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСобразования ΠΈΠ· Ρ‚ΠΈΠΏΠ° класса Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 14.9.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π²ΠΏΠΎΠ»Π½Π΅ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Ρ‚ΠΈΠΏ класса.