Примеры неоднозначности при перегрузке функций. (л.11)

Перегрузка функций. Примеры перегрузки функций. (л.11)

Пример функции, получающей в качестве параметра и возвращающей значения перечислимого типа. (метод. указ. к лаб.работе 3)

Функции с переменным числом аргументов. (л.10)

Функции с параметрами по умолчанию. (л.10)

Встраиваемые функции (inline-функции). (л.10)

Модификатор const. Его назначение при передаче параметров в функцию по указателю и по ссылке.(л.10)

Использование в функции локальных статических переменных. (л.10)

Использование ссылки в качестве типа возвращаемого функцией значения. (л.10)

С какой целью к составным данным применяют способ передачи параметров по ссылке даже в том случае, если они не являются результатами, возвращаемыми функциями. Что необходимо предпринять, чтобы случайное изменение формального параметра в функции не изменило значение аргумента (л.10)

14. Объяснить ошибку (л.10):

double *p = new double;

double& ref = *p;

ref = 1.0;

delete p;

ref = 1.5;

21. *Обработка завершения программы с помощью функции atexit(). (л.10)

23. Указать и объяснить ошибку, если она есть (л.10):

void f(const int* p)

{*p = 17;

int i = 29;

p = &i;

}

int i = 17; // в main

f(&i);

 

void f(const int& p)

{p = 17;

}

int i = 17; // в main

f(i);

 

void f(const int& p)

{int i = 29;

p = i;

}

int i = 17; // в main

f(i);

 

void f(int*);

int i = 17; // в main

const int* p = &i;

f(&i);

 

void f(int*);

int i = 17; // в main

const int* p = &i;

f(p);

 

void f(int*);

int i = 17; // в main

const int* p = &i;

const int j = 29;

f(&j);

 

24. Какие типы возвращаемых значений недопустимы для функций? (л.10)

25. Установить область действия идентификаторов (л.10):

int cube(int y);

void main() {

int y;

for (int x=1; x<=10; x++)

cout<<cube(x)<<endl;

y=cube(x)*cube(x);

}

int cube(int e) {return e*e*e;}

________________________________________________________________________________________________________________________________________________________

28. Указать возможность вызова функций (л.11):

extern void manip( int );

int main()

{

manip( 'a' );

return 0;

}

 

extern void print(int);

unsigned char uc;

print(uc);

 

extern void ff(int);

extern void ff(char);

enum Stat (Fail, Pass);

int main() {

ff(Pass);

ff(0);

}

 

29. Объяснить вызов перегруженных функций (л.11):

enum e1 { a1, b1, c1 };

enum e2 { a2, b2, c2=0x80000000 };

string format( int );

string format( unsigned int );

int main() {

format(a1);

format(a2);

return 0;

}

 

30. Объяснить ошибки при вызове перегруженных функций (л.11):

float f(float i);

double f(double i);

int main()

{

float x=10.09f;

double y=10.09;

cout << f(x) <<endl ;

cout << f(y) <<endl ;

cout << f(10) <<endl ;

_getch();

return 0;

}

 

 

int f(int a);

int f(int a, int b=1);

int main()

{

cout << f (10, 2) << endl;

cout << f (10) << endl;

_getch();

return 0;

}

 

int f(int a, int b);

int f(int a, int& b);

int main()

{

int ix=5, iy=10;

cout << f (ix, iy) << endl;

_getch();

return 0;

}

31. *Какие возможности предоставляет неиспользуемый формальный параметр в функции? (л.10)

 

32. Указать и объяснить ошибку, если она есть (л.10):

void swap(int* p, int* q);

void swap(int* p, int* q, int);

int main ()

{

int x=2;

int y=5;

swap(&x, &y, 5);

cout << x << " " << y << endl;

_getch();

return 0;

}

void swap(int* p, int* q, int)

{

int t = *p;

*p = *q;

*q = t;

}

void swap(int* p, int* q)

{

int t = *p;

t += *q;

*q = t;

}