ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для вычислСний Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ДруТСствСнная функция Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π»Π΅Π½ΠΎΠΌ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° объявлСна. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, вызывая Π΄Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ класса (Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ»ΠΈ стрСлку). Доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ класса друТСствСнная функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΡΠΈΠ»Ρƒ этого Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ объявлСн Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для вычислСний Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

1. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

1.1 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ дСйствия Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ

2. Π’Π΅ΠΊΡ‚ΠΎΡ€

2.1 Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

3. ΠšΠ»Π°ΡΡΡ‹

3.1 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

3.2 ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

3.3 ДруТСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

3.4 НСявный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this

3.5 Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

3.6 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

3.7 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Mathcad

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ На ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь матСматичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ — ваТная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ всСго программирования. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΈ ΡΠ»ΠΎΠΆΠ½Ρ‹Π΅ вычислСния благодаря простым ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ становятся простыми.

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ создавалась ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для вычислСний Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ срСды программирования Π²Ρ‹Π±Ρ€Π°Π½Π° MS Visual Studio 2008 ΠΈ ΡΠ·Ρ‹ΠΊ программирования C++.

1. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ размСрности называСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° чисСл, Π³Π΄Π΅, :

располоТСнных Π² m ΡΡ‚Ρ€ΠΎΠΊΠ°Ρ… ΠΈ n ΡΡ‚ΠΎΠ»Π±Ρ†Π°Ρ…. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° называСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ, Ссли .

1.1 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ дСйствия Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† сводится ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ опСрациям Π½Π°Π΄ ΠΈΡ… ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π‘Π°ΠΌΡ‹ΠΌ Π³Π»Π°Π²Π½Ρ‹ΠΌ свойством этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠ°Ρ‚Ρ€ΠΈΡ† ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†:

Π‘ΡƒΠΌΠΌΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ соотвСтствСнно сумма элСмСнтов исходных ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число сводится ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΡΡ‚ΠΎ число.

ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ — опСрация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° отраТаСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Если A — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‚ΠΎ AT — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° .

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† — Π΅ΡΡ‚ΡŒ опСрация вычислСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π²Π½Ρ‹ суммС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ элСмСнтов Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ мноТитСля ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ столбцов, сколько строк Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ. Если ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° A ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ, B —, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ AB = C Π΅ΡΡ‚ΡŒ .

2. Π’Π΅ΠΊΡ‚ΠΎΡ€ Если ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ столбца ΠΈΠ»ΠΈ строки, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ называСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. Π Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° называСтся число Π΅Π³ΠΎ элСмСнтов.

2.1 Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Если имССтся нСкоторая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, А Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ B Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ n, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π‘ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ m.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ умноТСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ-столбСц, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ количСство строк Ρ€Π°Π²Π½ΠΎ количСству строк исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ умноТСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ-строку, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ количСство столбцов Ρ€Π°Π²Π½ΠΎ количСству столбцов исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

3. ΠšΠ»Π°ΡΡΡ‹ Класс — это Ρ‚ΠΈΠΏ структуры, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹).

Для ограничСния доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ класса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ спСцификаторы доступа:

publicΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ доступа Π½Π΅Ρ‚;

protectedдоступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… классах;

privateдоступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ классС.

3.1 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΊΠ»Π°ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

Matrix (int m, int n)

Вакая функция называСтся конструктором ΠΈ ΡΠ»ΡƒΠΆΠΈΡ‚ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ создаваСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…. Имя конструктора Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса, конструктор Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return. Π’ΠΈΠΏ Π΅Π³ΠΎ явно Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½, поэтому Ρƒ Π»ΡŽΠ±ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько конструкторов.

~Matrix () — ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся дСструктором. Он Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ сущСствованиС нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅.

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

Matrix (const Matrix &A) называСтся конструктором ΠΊΠΎΠΏΠΈΠΉ. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, конструктор ΠΊΠΎΠΏΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ return. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ссылок ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ конструктор ΠΊΠΎΠΏΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся.

НСявный конструктор ΠΊΠΎΠΏΠΈΠΈ обСспСчиваСт простоС поэлСмСнтноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ. Π’Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ копирования часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ повСрхностным.

3.2 ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ языка Π‘++ для Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ. Для ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, состоящим ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова operator ΠΈ Π·Π½Π°ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтся Ρ‚Π΅ΠΌ, одномСстная ΠΈΠ»ΠΈ двухмСстная опСрация пСрСгруТаСтся, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ нСявных элСмСнтов Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ·Ρ‹ΠΊ Π΄Π²ΡƒΡ… взаимосвязанных особСнностСй: возмоТности ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ области видимости нСсколько ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ operator+.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ new ΠΈ delete, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

— ΠΎΠΏΠ΅Ρ€Π°Ρ‚орная функция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ нСстатичСской Ρ„Π΅Π½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ класса, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° класса ΠΈΠ»ΠΈ пСрСчислимого Ρ‚ΠΈΠΏΠ°, ΠΈΠ»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ссылкой Π½Π° Ρ‚ΠΈΠΏ класса ΠΈΠ»ΠΈ пСрСчислимый Ρ‚ΠΈΠΏ;

— ΠΎΠΏΠ΅Ρ€Π°Ρ‚орная функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΏΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° для встроСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…;

— ΠΎΠΏΠ΅Ρ€Π°Ρ‚орная функция ΡƒΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, объявлСнная ΠΊΠ°ΠΊ функция-Ρ‡Π»Π΅Π½, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²; Ссли ΠΆΠ΅ ΠΎΠ½Π° объявлСна ΠΊΠ°ΠΊ глобальная функция, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€;

— ΠΎΠΏΠ΅Ρ€Π°Ρ‚орная функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Π΄Ρ€.

3.3 ДруТСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Богласно ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ инкапсуляции Π΄Π°Π½Π½Ρ‹Ρ… Π‘++ функция, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Ρ‡Π»Π΅Π½ΠΎΠΌ класса, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ (private) элСмСнтам.

Π’ ΡΠ·Ρ‹ΠΊΠ΅ Π‘++ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ·Π΅ΠΉ. Π‘++ позволяСт ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ 2 Π²ΠΈΠ΄Π° Π΄Ρ€ΡƒΠ·Π΅ΠΉ класса: Π΄Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ друТСствСнный класс.

ДруТСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄Π½Π° такая функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ друТСствСнной Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ классу, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этого класса Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΅Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ставится ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово friend.

friend ostream& operator<<(ostream& os, const Matrix& A)

ДруТСствСнная функция Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π»Π΅Π½ΠΎΠΌ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° объявлСна. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, вызывая Π΄Ρ€ΡƒΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ доступа ΠΊ Ρ‡Π»Π΅Π½Ρƒ класса (Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ»ΠΈ стрСлку). Доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ класса друТСствСнная функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΡΠΈΠ»Ρƒ этого Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ объявлСн Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π΅ΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ друТСствСнна сразу нСскольким классам.

3.4 НСявный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса содСрТит Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

имя_Ρ‚ΠΈΠΏΠ° *this;

Π­Ρ‚ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ прСдставляСт собой адрСс ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this для доступа ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ класса ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π²Ρ€ΡΠ΄ Π»ΠΈ цСлСсообразно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΈ Ρ‚Π°ΠΊ подразумСваСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π―Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ this Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° трСбуСтся Ρ€Π°Π±ΠΎΡ‚Π° нСпосрСдствСнно с Π°Π΄Ρ€Π΅ΡΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских структур Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠ»Π°ΡΡΠΎΠΌ Matrix.

3.5 Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

#include «stdafx.h»

#include

#include «conio.h»

#include «math.h»

#include «time.h»

using namespace std;

// ΠšΠ›ΠΠ‘Π‘ MATRIX

class Matrix

{

public:

double** M;

int m;// число строк

int n;// число столбцов

public:

// конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Matrix ();

// конструктор

Matrix (int m, int n);

// конструктор ΠΊΠΎΠΏΠΈΠΉ

Matrix (const Matrix &A);

// Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ случайными числами

void SetMatrix ();

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Matrix& operator=(Matrix &A);

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° слоТСния

Matrix operator+(Matrix &);

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° умноТСния Π½Π° Ρ‡ΠΈΡΠ»ΠΎ

Matrix operator*(const int &);

// ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

Matrix operator*(Matrix &);

// транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Matrix& operator^(const Matrix &);

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ

friend ostream& operator<<(ostream& os, const Matrix& A);

// дСструктор

~Matrix ();

};

// ΠšΠ›ΠΠ‘Π‘ VECTOR

class Vector

{

double *v;

int n;

public:

// конструктор

Vector (int n);

// конструктор ΠΊΠΎΠΏΠΈΠΉ

Vector (const Vector &a);

// дСструктор

~Vector ();

// Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° случайными числами

void SetVector ();

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Vector& operator=(Vector &a);

// ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ

friend ostream& operator<<(ostream& os, const Vector& a);

// ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

Vector operator*(const Matrix &A);

};

// ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Matrix:Matrix ()

{

M = NULL;

}

// ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

Matrix:Matrix (int _m, int _n)

{

m = _m;

n = _n;

M = new double*[m];

for (int i = 0; i < m; i++)

M[i] = new double[n];

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

{

M[i][j] = 0;

}

}

// ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΠΉ

Matrix:Matrix (const Matrix &A)

{

m = A. m;

n = A. n;

M = new double*[m];

for (int i = 0; i < m; i++)

M[i] = new double[n];

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

{

M[i][j]=A.M[i][j];

}

}

// Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ случайными числами

void Matrix: SetMatrix ()

{

for (int i = 0; i < m; i++)

{

for (int j = 0; j < n; j++)

{

M[i][j]=(double)((rand ()%200)-100.0);

}

}

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Matrix& Matrix: operator =(Matrix &A)

{

if (M≠NULL)

{

for (int i = 0; i < m; i++)

{

delete[] M[i];

}

delete[] M;

}

M = new double*[m];

for (int i = 0; i < m; i++)

M[i] = new double[n];

m = A. m;

n = A. n;

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

M[i][j] = A. M[i][j];

return *this;

}

// Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†

Matrix Matrix: operator+(Matrix &A)

{

Matrix temp (m, n);

if (n≠A.n || m≠A.m)

{

cout<<" Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. n"

" НС ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ размСрности! n"

" ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. n" ;

exit (0);

}

else

{

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

temp.M[i][j] = M[i][j] + A. M[i][j];

return temp;

}

}

// Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° Ρ‡ΠΈΡΠ»ΠΎ

Matrix Matrix: operator*(const int &k)

{

Matrix temp (m, n);

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

temp.M[i][j] = M[i][j]*k;

return temp;

}

// Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

Matrix Matrix: operator*(Matrix &A)

{

Matrix temp (m, A. n);

for (int i = 0; i < m; i++)

{

for (int j = 0; j < n; j++)

temp.M[i][j] = 0;

}

if (n≠A.m)

{

cout<<" Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. n"

" НС ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ размСрности! n"

" ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. n" ;

exit (0);

}

else

{

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

for (int k = 0; k < A. n; k++)

temp.M[i][k] += M[i][j] * A. M[j][k];

}

return temp;

}

// ВранспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Matrix& Matrix: operator ^(const Matrix &A)

{

m = A. m;

n = A. n;

for (int i = 0; i < m; i++)

for (int j = 0; j < n; j++)

{

M[i][j] = A. M[j][i];

}

return *this;

}

// ДСструктор

Matrix:~Matrix ()

{

for (int i = 0; i < m; i++)

{

delete[] M[i];

}

delete[] M;

}

// ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π°

ostream& operator<<(ostream& os, const Matrix& A)

{

os<<'n';

for (int i = 0; i < A. m; i++)

{

for (int j = 0; j < A. n; j++)

os<<<" t" ;

os<<'n';

}

return os;

}

// ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€

Vector:Vector (int _n)

{

n = _n;

v = new double[n];

}

// ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΠΉ

Vector:Vector (const Vector &a)

{

n = a. n;

v = new double[n];

for (int i = 0; i < n; i++)

v[i] = a. v[i];

}

// ДСструктор

Vector:~Vector ()

{

delete[] v;

}

// Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° случайными числами

void Vector: SetVector ()

{

v = new double[n];

for (int i = 0; i < n; i++)

{

v[i]=(double)((rand ()%200)-100.0);

}

}

// ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания

Vector& Vector: operator =(Vector &a)

{

n = a. n;

for (int i = 0; i < n; i++)

v[i] = a. v[i];

return *this;

}

// Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

Vector Vector: operator* (const Matrix &A)

{

Vector temp (A.n);

for (int i=0; i< A. n; i++)

temp.v[i]=0;

for (int i = 0; i < A. m; i++)

for (int j = 0; j < A. n; j++)

temp.v[j] += v[i]*A.M[i][j];

return temp;

}

// ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π°

ostream& operator<<(ostream& os, const Vector& a)

{

os<<'n';

for (int i = 0; i < a. n; i++)

{

os<<<" «;

os<<' ';

}

os<<'n';

return os;

}

int _tmain (int argc, _TCHAR* argv[])

{

setlocale (LC_CTYPE, «Russian_Russia.1251»);

srand ((unsigned)time (NULL));

Matrix A (3,3), B (3,3), C (3,3), D (3,3), E (3,3), F (3,3), G (4,2), I (2,6), H (4,6);

Vector v (3), s (3);

A.SetMatrix ();

B.SetMatrix ();

G.SetMatrix ();

I.SetMatrix ();

v.SetVector ();

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° А:" <

cout<

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° B:" <

cout<

C = A + B;

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° C=A+B:" <

cout<

D = C*3;

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° D=C*3:" <

cout<

E = A*B;

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° E=A*B:" <

cout<

F^A;

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° F=At:" <

cout<

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° G:" <

cout<

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° I:" <

cout<

H=G*I;

cout<<" ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° H=G*I:" <

cout<

cout<<" Π’Π΅ΠΊΡ‚ΠΎΡ€ v:" <

cout<

s=v*A;

cout<<" Π’Π΅ΠΊΡ‚ΠΎΡ€ s=v*A:" <

cout<

return 0;

}

3.6 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

3.7 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Mathcad

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° класс Π²Π΅ΠΊΡ‚ΠΎΡ€ Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π‘ΡŒeΡ€Π½ Бтрауструп. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство ΠΏΠΎ C++, 1995

Π“Π»ΡƒΡˆΠ°ΠΊΠΎΠ² Π‘. Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++, ΠΈΠ·Π΄.2-Π΅, Π΄ΠΎΠΏ. ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚. — Πœ.:АБВ, 2008. — 685 с.

Π₯Π°Ρ€Π²ΠΈ Π”Π΅ΠΉΡ‚Π΅Π», Пол Π”Π΅ΠΉΡ‚Π΅Π». Как ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π‘. — Π‘ΠΈΠ½ΠΎΠΌ-ΠŸΡ€Π΅ΡΡ, 2008. — 1024 с.

www.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ