Программирование >>  Программирование на языке c++ 

1 ... 26 27 28 [ 29 ] 30 31 32 ... 159


ДЛЯ объекта А и второго конструктора для объекта В B.ff()->display(); Результат: 100 100 A.displayO; Результат: 10 20

A.f(B).displayO; Результат: 110 120

Второй пример демонстрирует использование аргументов функции, заданных по умолчанию.

#include <iostream.h> class my class { int x,y,z; public:

my class() { x=y=0; }

float add mul(int a=0,int b=0,int c=0,char ch=+); здесь

все аргументы можно задать по умолчанию void displayO { cout х \t у endl; }

float my class;:add mul(int a,int b,int c.char ch)

{ if {ch==+) return x=a+b+c; if (ch==*) return y=a*b*c; cout wrong message\n ; return NULL;

} для упрощения в этой функции, как и в предыдущих программах, не обрабатываются возможные ошибки

void main{void)

{ my class А;

cout A.add mul{5,10) endl; Результат: 15 cout A.add mul(2,5,10) endl; Результат: 17 cout A.add mul{2,5,10,*) endl; Результат: 100 A.displayO; Результат: 17 100

Третья программа является более сложной, по- -этому рассмотрим ее подробнее. #include <iostream.h> class my class { int x,y; public:

my class(int X,int Y) { x=X; y=Y; } конструктор 1



my class(int X) { х=у=Х; } конструктор 2

my class{) { х=у=0; } конструктор 3

void display word() { cout Hello\n ; } void displayO { cout x \t у endl; }

void f(my class& M, void (my class::*p){)=my class::display) { M.displayO;

(M*p)(); } void main(void) { my class A( 10,20);

f(A);

f(A,rTiy class::display word);

Результат: 10 20

10 20

Результат: 10 20 Hello

Рассмотрим описание глобальной функции f:

void f(my class& М, void (my class::*p){)=my class::display) { M.displayO; {M.*p)0; }

Она не возвращает значений и имеет два параметра:

my class& М - ссылка М на объект класса my class;

void (my class::*p)()=my class::display - указатель р на функцию класса my class, которая не имеет аргументов и не возвращает значений. По умолчанию р указывает на функцию display класса my class.

В выражении (М.*р)0; вызывается функция объекта М (а это объект класса my class) через указатель на функцию р. В приведенной программе функция f вызвана дважды. Первый раз она вызвана с одним аргументом, поэтому второй аргумент получит значение по умолчанию: my class::display. Второй раз она вызвана с двумя аргументами, поэтому они оба заданы явно.

Следующие два примера показывают другие возможные способы конструирования объектов. #include <iostream.h> struct my class { int a,b;



char* s;

my class(int A,int B,char *S) : a(A),b(B),s(S) {};

void fun(my class& M)

{ cout M.a M.b M.s; }

void main(void)

{ my class ms = my class{ 19,95, How are you? \n ); fun{ms);

fun(my class( 19,96, Fine!!! \n ));

Конструктор можно задать и в следующем виде:

my class(int A,int B,char *S) : a(A),b(B),s(S) {};

После выражения my class(int A,int B,char *S) записано двоеточие и затем через запятую перечислены все компоненты-данные класса my class, которым необходимо присвоить значение, т. е. компоненту а необходимо присвоить значение А, компоненту b - значение В и компоненту s - значение S. После этого в теле конструктора не надо выполнять никаких действий, что записывается в виде {}. Другими словами, такая форма эквивалентна следующему описанию:

my class(int A.int B,char *S) { a=A; b=B; s=S; };

Класс можно описать и так:

my class ms = my class( 19,95, How are you? \n ); Здесь вызывается конструктор, который строит объект с именем ms (ms - это имя объекта, а не указатель на объект). В выражении

fun(my class{ 19,96, Fine!!! \n )); тоже вызывается конструктор класса my class. Построенный объект передается в функцию и далее используется в ней. Таким же образом можно создать и анонимный объект (объект без имени).

Результаты работы программы представятся в виде:

1995 How are you?

1996 Fine!!!

Следующая программа показывает еще одну возможность вызова конструктора с одним параметром:

#include <iostream.h>



1 ... 26 27 28 [ 29 ] 30 31 32 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика