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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

38:             break;

39:

40:          case 4:

41:             PrintVals(valOne, valTwo);

42:             Swap(valOne, valTwo);

43:             PrintVals(valOne, valTwo);

44:             break;

45:

46:          default:

47:             fOuit = true;

48:             break;

49:       }

50:

51:       if (fQuit)

52:          break;

53:    }

54:    return 0;

55: }

56:

57: void PrintVals(int x, int y)

58: {

59:    cout << "x: " << x << " y: " << y << endl;

60: }

61:

62: void Square (int & rX, int & rY)

63: {

64:    rX *= rX;

65:    rY *= rY;

66: }

67:

68: void Cube (int & rX, int & rY)

69: {

70:    int tmp;

71:

72:    tmp = rX;

73:    rX *= rX;

74:    rX = rX * tmp;

75:

76:    tmp = rY;

77:    rY *= rY;

78:    rY = rY * tmp;

79: }

80:

81: void Swap(int & rX, int & rY)

82: {

83:    int temp;

84:    temp = rX;

85:    rX = rY;

86:    rY = temp;

87: }

88:

89: void GetVals (int & rValOne, int & rValTwo)

90: {

91:    cout << "New value for ValOne: ";

92:    cin >> rValOne;

93:    cout << "New value for ValTwo: ";

94:    cin >> rValTwo;

95: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 1

Ρ…. 1 Ρƒ. 2

New value for ValOne: 2

New value for ValTwo: 3

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 3

x: 2 y: 3

x: 8 y: 27

(0)Quit (1 )Change Values (2)Square (3)Cube (4)Swap: 2

x: 8 y: 27

x: 64 y: 729

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 4

x: 64 y: 729

x: 729 y: 64

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 0


Анализ: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² листингС 14.5. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ, выводимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° экран, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ измСнилась. Но Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ увСличился с 22 Π΄ΠΎ 46 строк. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PrintVals() приходится ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ case.

Π—Π°ΠΌΠ°Π½Ρ‡ΠΈΠ²Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ размСщСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PrintVals() Π²Π²Π΅Ρ€Ρ…Ρƒ ΠΈ Π²Π½ΠΈΠ·Ρƒ Ρ†ΠΈΠΊΠ»Π° while, Π° Π½Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ case. Но Ρ‚ΠΎΠ³Π΄Π° функция PrintVals() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ Π² случаС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, Ρ‡Π΅Π³ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ.


Π£ΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Имя указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вовсС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ имя самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, хотя Π²Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΏΡ€Π°Π²Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΡƒΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pFuncβ€”ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ°1ΠΎΠΏΠ΄,ΠΈ имя этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” pFunc. Π£ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ:

pFunc(x);

ΠΈΠ»ΠΈ

(*pFunc) (x);

Оба выраТСния ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ. Π₯отя ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎ- Ρ€ΠΎΡ‡Π΅, Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ большС гибкости.


Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π° Π·Π° счСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… условиях прСимущСства примСнСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠΉ. НапримСр, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ массив ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ситуации.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Аналогично объявлСнию массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сигнатурой, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… значСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Листинг 14.7 являСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· листинга 14.5, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ собраны Π² массив.

Листинг 14.7. ИспользованиС массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1: // Листинг 14.7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

2:

3: #include <iostream.h>

4:

5: void Square (int&,int&);

6: void Cube (int&, int&);

7: void Swap (int&, int &);

8: void GetVals(int&, int&);

9: void PrintVals(int, int);

10:

11: int main()

12: {

13:    int valOne=1, valTwo=2;

14:    int choice, i;

15:    const MaxArray = 5;

16:    void (*pFuncArray[MaxArray])(int&, int&);

17:

18:    for (i=0;i<MaxArray;i++)

19:    {

20:       cout << "(1)Change Values (2)Square (3)Cube (4)Swap: ";

21:       cin >> choice;

22:       switch (choice)

23:       {

24:          case 1:pFuncArray[i] = GetVals; break;

25:          case 2:pFuncArray[i] = Square; break;

26:          case 3:pFuncArray[i] = Cube; break;

27:          case 4:pFuncArray[i] = Swap; break;

28:          default:pFuncArray[i] = 0;

29:       }

30:    }

31:

32:    for (i=0;i<MaxArray; i++)

33:    {

34:       if ( pFuncArray[i] == 0 )

35:          continue;

36:       pFuncArray[i](valOne,valTwo);

37:       PrintVals(valOne,valTwo);

38:    }

39:    return 0;

40: }

41:

42: void PrintVals(int x, int Ρƒ)

43: {

44:    cout << "x: " << x << " Ρƒ: " << Ρƒ << endl;

45: }

46:

47: void Square (int & rX, int & rY)

48: {

49:    rX *= rX;

50:    rY *= rY;

51: }

52:

53: void Cube (int & rX, int & rY)

54: {

55:    int tmp;

56:

57:    tmp = rX;

58:    rX *= rX;

59:    rX = rX * tmp;

60:

61:    tmp = rY;

62:    rY *= rY;

63:    rY = rY * tmp;

64: }

65:

66: void Swap(int & rX, int & rY)

67: {

68:    int temp;

69:    temp = rX;

70:    rX = rY;

71:    rY = temp;

72: }

73:

74: void GetVals (int & rValOne, int & rValTwo)

75: {

76:    cout << "New value for ValOne: ";

77:    cin >> rValOne;

78:    cout << "New value for ValTwo: ";

79:    cin >> rValTwo;

80: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

(1)Change Values (2)Square (3)Cube (4)Swap: 1

(1)Change Values (2)Square (3)Cube (4)Swap: 2

(1)Change Values (2)Square (3)Cube (4)Swap: 3

(1)Change Values (2)Square (3)Cube (4)Swap: 4

(1)Change Values (2)Square (3)Cube (4)Swap: 2

New Value for ValOne: 2

New Value for ValTwo: 3

x: 2 y: 3

x: 4 y: 9

x: 64 y: 729

x: 729 y: 64

x: 531441 y:4096


Анализ: Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ листингС, для экономии мСста Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ выполнСния ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π² листингС 14.5. Π’ строкС 16 ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив pFuncArray, содСрТащий ΠΏΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ void ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Π²Π΅ ссылки Π½Π° значСния Ρ‚ΠΈΠΏΠ° int.

Π’ строках 18-30 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ прСдлагаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π»Π΅Π½ массива связываСтся с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ осущСствляСтся Π² строках 32-38, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π° экран сразу выводится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΈΠ»ΠΈ массивы ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ) ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Π² Π½ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля Π½ΡƒΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Листинг 14.5 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΊΡ€ΠΎΠΌΠ΅ main()), которая Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ исходныС значСния Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ вновь Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ значСния. ИмСнно Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π² листингС 14.8.

Листинг 14.8. ΠŸΠ΅Ρ€Π΅Π΄Π°Π½Π° указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1: // Листинг 14.8. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

2:

3: #include <iostream.h>

4:

5: void Square (int&,int&);

6: void Cube (int&, int&);

7: void Swap (int&, int &);

8: void GetVals(int&, int&);

9: void PrintVals(void (*)(int&, int&),int&, int&);

10:

11: int main()

12: {

13:    int val0ne=1, valTwo=2;

14:    int choice;

15:    bool fQuit = false;

16:

17:    void (*pFunc)(int&, int&);

18:

19:    while (fQuit == false)

20:    {

21:       cout << "(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: ";

22:       cin >> choice;

23:       switch (choice)

24:       {

25:          case 1:pFunc = GetVals; break;

26:          case 2:pFunc = Square; break;

27:          case 3:pFunc = Cube; break;

28:          case 4:pFunc = Swap; break;

29:          default:fQuit = true; break;

30:       }

31:       if (fQuit == true)

32:       break;

33:       PrintVals ( pFunc, valOne, valTwo);

34:    }

35:

36:    return 0;

37: }

38:

39: void PrintVals( void (*pFunc)(int&, int&),int& x, int& Ρƒ)

40: {

41:    cout << "x: " << x << " Ρƒ: " << Ρƒ << endl;

42:    pFunc(x,Ρƒ);

43:    cout << "x: " << x << " Ρƒ: " << Ρƒ << endl;

44: }

45:

46: void Square (int & rX, int & rY)

47: {

48:    rX *= rX;

49:    rY *= rY;

50: }

51:

52: void Cube (int & rX, int &rY)

53: {

54:    int tmp;

55:

56:    tmp = rX;

57:    rX *= rX;

58:    rX = rX * tmp;

59:

60:    tmp = rY;

61:    rY *= rY;

62:    rY = rY * tmp;

63: }

64:

65: void Swap(int & rX, int& rY)

66: {

67:    int temp;

68:    temp = rX;

69:    rX = rY;

70:    rY = temp;

71: }

72:

73: void GetVals (int & rValOne, int & rValTwo)

74: {

75:    cout << "New value for ValOne: ";

76:    cin >> rValOne;

77:    cout << "New value for ValTwo: ";

78:    cin >> rValTwo;

79: }


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 1

x: 1 Ρƒ: 2

New value for Val0ne: 2

New value for ValTwo: 3

x: 2 Ρƒ: 3

(0)Quit (1)Change Values (2)Square (3)Cube (4)Swap: 3