Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Законченный Класс



Программирование без скрытия данных (с применением структур) требует меньшей продуманности, чем программирование со скрытием данных (с использованием классов). Структуру можно определить, не слишком задумываясь о том, как ее предполагается использовать. А когда определяется класс, все внимание сосредотачивается на обеспечении нового типа полным множеством операций; это важное смещение акцента. Время, потраченное на разработку нового типа, обычно многократно окупается при разработке и тестировании программы.

Вот пример законченного типа 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...