Обычно при обработке объектов требуется три типа функций:
- ввод данных в объект;
- вывод данных объекта;
- функции обработки.
Ввод данных в объект
Ввод данных в объект может быть реализован 2-мя способами.
Ый способ
Используется член-функция ввода, которая передает в объект данные из внешней вызывающей функции через фактические параметры.
Пример 1
#include<stdio.h>
#include<string.h>
#include<conio.h>
class q1
{ int a,b;// закрытые по умолчанию члены-данные
int mas1[10];
char mas2[12];
public:
void vvod(int x1,int x2,int* x3,char * x4) /* открытая член- функция ввода*/
{ a=x1; b=x2;
for(int i=0;i<10;i++)// запись в массив объекта mas1//
mas1[i]=x3[i];
strcpy(mas2,x4);// запись в массив объекта mas2
}
}; // конец определения класса q1
int main()
{ int a=3, b=5;/* инициализация a,b*/
int y1[10]={0,1,3,44,7,8,9,1,43,5}; /* инициализация массива y1*/
char y2[12]="ffffffff";/* инициализация массива y2*/
q1 obj1; // определение объекта obj1
clrscr();
obj1.vvod(a,b,y1,y2); /* ввод данных в объект obj1 массивов y1 и y2*/
return 0;
}
Комментарии
В данном примере в функции ввода определены два формальных параметра целого типа и два указателя на массивы целого типа и символьного типа. В функции ввода производится присвоение значения этих параметров членам данных; при этом для строки (символьного массива) используется функция копирования, а не цикл поэлементного присвоения.
Ой способ
В этом случае ввод производится непосредственно в теле члене-функции ввода.
Замечание
В приведенных примерах используются средства переопределенного ввода-вывода языка Си++ (смотри комментарии в программах и раздел 1.5). Для использования этих средств должен быть подключен с помощью оператора include файл iostream.
Пример
#include<iostream.h>
#include <conio.h>
class q1
{ int a,b;/*закрытые члены-данные*/
int mas1[10];
char mas2[12];
public:
void vvod() /* член-функция ввода членов-данных*/
{for (int i=0;i<10;i++)
{ cout<<"введите текущий элемент -целое число \n ";
cin>>mas1[i]; /* ввод данных через стандартный объект cout*/
}
cout<<"введите строку"<<endl;
cin>>mas2;
}//* конец функции ввода
}; /* конец описания класса q1*/
int main()
{clrscr();
q1 obj1;
obj1.vvod(); /* вызов открытой член –функции ввода данных в объект obj1*/
return 0;
}
Комментарий
В данном случае используется член-функция ввода, которая не имеет параметров; ввод членов-данных вводится непосредственно в теле функции.
Вывод данных объекта
Вывод данных объекта также может быть реализован двумя способами.
Ый способ
Используется член-функция, которая не имеет параметров и которая печатает значения членов-данных с использованием библиотечных функций непосредственно в теле функции.
Пример
Один из приведенных выше примеров дополнен функцией вывода.
#include<stdio.h>
#include<string.h>
#include<conio.h>
class q1
{ int a,b;// закрытые члены-данные
int mas1[10]; // массив целых чисел
char mas2[12];// массив символов
public:
void vvod(int x1,int x2,int* x3,char * x4) // член-функция ввода
{ a=x1; b=x2;
for(int i=0;i<10;i++)
mas1[i]=x3[i];
strcpy(mas2,x4);
}
void vivod() // член-функция вывода без параметров
{ printf("dannie obekta \n");
printf("a=%d b=%d \n",a,b);
for (int i=0;i<10;i++)// печать массива mas1
printf("mas1[%d]=%d \n",i,mas1[i]);
printf ("massiv mas2 %s",mas2); //печать массива mas2
}
}; // конец определения класса
int main()
{ int a=3, b=5;
int y1[10]={0,1,3,44,7,8,9,1,43,5};
char y2[12]="ffffffff";
q1 obj1; // определение объекта obj1
clrscr();
obj1.vvod(a,b,y1,y2); // ввод данных в объект
obj1.vivod();// // вывод данных объекта
return 0;
}
Ой способ
В этом способе можно распечатать члены-данные функции в вызывающей программе; это означает, что функция вывода должна передать в вызывающую программу значения членов-данных через параметры функции. Следовательно, при вызове функции вывода должны быть заданы адреса данных вызывающей программы, в которые в теле функции записываются значения членов-данных.
Пример
#include<iostream.h>
#include<string.h>
#include <conio.h>
class q1
{;/*закрытые члены-данные*/
int mas1[10];
char mas2[12];
public:
void vvod() /* функция ввода*/
{for (int i=0;i<10;i++)
{ cout<<"введите текущий элемент -целое число \n ";
cin>>mas1[i];
}
cout<<"введите строку"<<endl;
cin>>mas2;
}
void vivod(int *x1, char *x2) /*функция вывода членов-данных в данные главной программы*/
{for (int i=0;i<10;i++)
x1[i]=mas1[i];
strcpy(x2,mas2);
} /*конец функции вывода*/
}; /* конец описания класса*/
int main()
{clrscr();
int a[10]; /* память для записи членов-данных из объекта*/
char stroka[12]; /* память для записи членов-данных из объекта*/
q1 obj1;
obj1.vvod(); /*ввод данных в объект*/
obj1.vivod(a,stroka); /* вывод данных из объекта в главную функцию*/
for(int i=0;i<10;i++) /* вывод данных из объекта в главной функции*/
cout<<"a["<<i<<"]= "<<a[i]<<endl;
cout<<"строка "<<stroka<<endl;
return 0;
}
Комментарий
В данном примере члены –данные объекта записываются член-функцией вывода в память , которая выделена в функции main. Эта память задается фактическими параметрами a,stroka. При этом надо помнить, что в этом случае необходимо передавать значения адресов переменных. Непосредственная выдача на печать производится в главной функции.
Функции обработки
Функции обработки реализует алгоритм обработки в соответствии с поставленной задачей, и, естественно, здесь не может быть дано каких-либо стандартных рекомендаций. Но тем не менее следует сделать следующие замечания.
- необходимо использовать, в основном, только закрытые члены-данные;
- необходимо использовать закрытые член-функции, которые могут использоваться открытыми член-функциями;
- если результат обработки представлен одним значением, то следует использовать член-функцию, которая возвращает значения результата и передает его в основную программу;
- в общем случае не следует записывать значения результатов обработки в качестве членов- данных объекта; это нерационально увеличивает объем памяти, выделяемой объекту;
- если в качестве членов-данных используются массивы с переменной длиной, то необходимо вводить член-данное, который представляет величину n. Эта величина должна представлять действительный размер массива и должна формироваться при вводе данных.
Дата: 2019-03-05, просмотров: 247.