Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Программирование без скрытия данных (с применением структур) требует меньшей продуманности, чем программирование со скрытием данных (с использованием классов). Структуру можно определить, не слишком задумываясь о том, как ее предполагается использовать. А когда определяется класс, все внимание сосредотачивается на обеспечении нового типа полным множеством операций; это важное смещение акцента. Время, потраченное на разработку нового типа, обычно многократно окупается при разработке и тестировании программы.
Вот пример законченного типа PascalSet, который реализует понятие «битовое множество целых однобайтовых беззнаковых»:
Файл pascalset.h
#ifndef _PS_H
#define _PS_H
#include <mem.h>
class PasSet {
unsigned char data[32];
unsigned char GetMask(unsigned char x)
{return 1<<x;}
unsigned char GetNumByte(unsigned char x)
{return x/8;}
unsigned char GetNumBit(unsigned char x)
{return x%8;}
public:
//Конструктор
PasSet()
{memset(data, 0, sizeof(data));}
//Проверка вхождения
int InSet(unsigned char x);
// Включение элементаvoid include(unsigned char x);
// Исключение элементаvoid exclude(unsigned char x);
//Вывод
void print();
};
#endif
Файл pascalset.cpp
include <stdio.h>
#include "pascalset.h"
int PasSet::InSet(unsigned char x)
{
unsigned char nbyte=GetNumByte(x);
unsigned char nbit=GetNumBit(x);
unsigned char mask=GetMask(nbit);
return data[nbyte] & mask;
}
void PasSet::include(unsigned char x)
{
unsigned char nbyte=GetNumByte(x);
unsigned char nbit=GetNumBit(x);
unsigned char mask=GetMask(nbit);
data[nbyte]|=mask;
}
void PasSet::exclude(unsigned char x)
{
unsigned char nbyte=GetNumByte(x);
unsigned char nbit=GetNumBit(x);
unsigned char mask=GetMask(nbit);
if (InSet(x)) data[nbyte]^=mask;
}
void PasSet::print()
{
for (int i=0; i<256; i++)
if (InSet((unsigned char)i)) printf("%d ", i);
printf("\n");
}
Файл mainset.cpp
#include <stdio.h>
#include "pascalset.h"
int main(int argc, char* argv[])
{
PasSet s;
s.include(8);s.include(3);s.include(5);
s.print();
s.exclude(3);
s.print();
if (s.InSet(5)) printf("5 is in set\n");
else printf("5 is not in set\n");
getchar();
return 0;
}
Результат работы
3 5 85 85 is in setДата публикования: 2015-01-13; Прочитано: 201 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!