Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Progi / lesson 1 / Лекция / lec1.doc
Скачиваний:
36
Добавлен:
28.03.2015
Размер:
88.58 Кб
Скачать

Int main(int argc, char* argv[])

{

int m,s,k;

Record x,y,z;

x.Put(4,36); // min=4 sec=36

y.Put(2,4); // min=2 sec=4

k=y.Numbersec(); // k=124

z=z.Srednee(x,y);

// объект z вызывает метод Srednee с аргументами x,y

// возвращается объект типа Record, который

// присваивается z

printf(“%d “,k);

m=z.Getmin();

s=z.Getsec();

printf(“%d %d”,m,s); // 3 20

}

В лабораторной работе следует для определяемого класса определить методы:

метод инициализации Init;

ввод с клавиатуры Read;

вывод на экран Display;

Для Record методы Read, Init, Display имеют вид:

class Record

{

public:

int Numbersec(); // количество секунд

int Getmin(); // число минут

int Getsec(); // число секунд

Record Srednee(Record a,Record b);

void Read();

void Display();

void Init(int m,int s);

private:

int min;

int sec;

};

...............................

void Record::Read()

{

scanf(“%d,%d”,&min,&sec);

}

void Record::Display()

{

printf(“%d, %d”,min,sec);

}

void Record::Init(int m,int s)

{

min=m;

sec=s;

}

Int main(int argc, char* argv[])

{

Record a,b;

a.Read(); // ввод с консоли 2 35

b.Init(1,19); //

a.Display(); // 2 35

printf(“\n”);

b.Display(); // 1 19

}

7) полями одного класса могут быть объекты другого, ранее определенного класса

При этом ранее определенный класс считается вспомогательным, а определяемый основным.

После класса Record определим класс Sportsman , в котором имеется фамилия и два результата по бегу. Для Sportsman определим методы доступа к фамилии и метод Best определение лучшего из двух результатов. Также определим метод Init для задания фамилии и двух результатов спортсмена.

В Record оставлено минимальное число методов для иллюстрации

#include "stdafx.h"

#include <string.h>

class Record

{

public:

int Numbersec(); // количество секунд

void Init(int m,int s); // задание начальных значений полей

private:

int min;

int sec;

};

void Record::Init(int m,int s)

{

min=m;

sec=s;

}

int Record::Numbersec()

{

return min*60+sec;

}

class Sportsman

{

public:

char* GetFam(); // возвращает строку-фамилию

void PutFam(char *s); // задание фамилии

Record Best(); // выбрать из двух результатов лучший и вернуть

void Init(char *f,int m1,int s1,int m2,int s2); // задание фамилии и значений min,sec обеим результатам

private:

char Fam[30]; // фамилия

Record FirstRezult; // первый результат спортсмена

Record SecondRezult; // второй результат спортсмена

};

char* Sportsman::GetFam()

{

return Fam;

}

void Sportsman::PutFam(char *s)

{

strcpy(Fam,s);

}

void Sportsman::Init( char *f,int m1,int s1,int m2,int s2)

{

strcpy(Fam,f);

FirstRezult.Init(m1,s1); // FirstRezult.min=m1 FirstRezult.sec=s1

SecondRezult.Init(m2,s2); // SecondRezult.min=m2 SecondRezult.sec=s2

// FirstRezult.min=m1; // ошибка обращенеие к private

}

Record Sportsman::Best()

{

int sec1,sec2; // секунды первого и второго результатов

sec1=FirstRezult.Numbersec(); // вычисление числа секунд 1 результата

sec2=SecondRezult.Numbersec(); // вычисление числа секунд 2 результата

if (sec1<sec2)

return FirstRezult;

else

return SecondRezult;

}

int _tmain(int argc, _TCHAR* argv[])

{

Sportsman F,S; // два спортсмена

char c[30];

// тест для задания и получения фамилий спортсменов

F.PutFam("First"); // фамилия у P ->First

strcpy(c,F.GetFam());

printf("%s",c); // вывод извлеченной фамилии Pu

printf("\n");

S.PutFam("Second"); // фамилия у Z ->Me

strcpy(c,S.GetFam());

printf("%s",c); // вывод извлеченной фамилии Me

printf("\n");

// кто из спортсменов лучше

Sportsman S,N;

Record sb,nb; // для записи лучших результатов P,Z

int ssec,nsec; // число секунд в лучшем результате P,Z

S.Init("So",1,15,2,5); // у S 1 мин,15 сек и 2 мин,5 сек

N.Init("Na",3,5,1,40); // у N 3 мин,5 сек и 1 мин, 40 сек

// S.FirstRezult.Init(1,15); // ошибка вызов S.FirstRezult private

sb=S.Best(); // pb лучшее время у S (1 мин, 15 сек)

n0b=N.Best(); // zb лучшее время у N (1 мин, 40 сек)

ssec=sb.Numbersec(); // число секунд во времени pb (75)

nsec=nb.Numbersec(); // число секунд во времени zb

if(ssec<nsec) // кто из спортсменов лучше

printf("S лучше");

else

printf("N лучше");

return 0;

}

8) принятый способ размещения классов по файлам

В консольном приложении классы размещаются подряд

class Record // описание класса

{

....

};

void Record::Init(int m,int s) // методы класса Record

{

.....

}

....

class Sportsmen // описание следующего класса

{

....

};

char* Sportsman::GetFam() // методы следующего класса

{

...

}

....

int main(int argc, char* argv[]) // главная программа

{

....

}

C++ Builder, Visual C++, Qt и другие размещают классы по файлам:

файл Record.h // заголовочный

class Record // описание класса

{

....

};

файл Record.cpp // методы класса

void Record::Init(int m,int s) // методы класса Record

{

.....

}

....

файл Sportsman.h // заголовочный

class Sportsmen // описание следующего класса

{

....

};

файл Sportsman.cpp

char* Sportsman::GetFam() // методы следующего класса

{

...

}

....

файл lab1.cpp // главная программа

int main(int argc, char* argv[]) // главная программа

{

....

}

9) Отладчик в Visual Studio

F9 - установить точку останова программы

F5 - выполнить программу (до первой точки останова, если есть)

F10 - выполнить строку

F11 - зайти в функцию, если она есть в строке

.....

int Record::Numbersec()

{

....

}

....

k=a.Numbecsec(); // F11 -> Numbersec

Shift-F5 - сброс выпоненияы

Для просмотра переменных подвести курсор мыши

Соседние файлы в папке Лекция