Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lect02

.pdf
Скачиваний:
9
Добавлен:
06.02.2016
Размер:
738.62 Кб
Скачать

Реализацияметодовза

пределамиописаниякласса

class имя_класса {

// Описания, секции и т.п.

тип имя_метода(параметры метода);

};

тип имя_класса::имя_метода(параметры метода)

{

// тело метода

}

P.S. Такой способ разделения описания и реализации совпадает с использованием прототипов функций в

C/C++, но в отличие от прототипов, меняет

поведение компилятора при обработке метода!

Реализацияметодовза

пределамиописаниякласса

class имя_класса {

// Описания, секции и т.п.

тип имя_метода(параметры метода);

};

тип имя_класса::имя_метода(параметры метода)

{

// тело метода

}

P.S. Такой способ разделения описания и реализации совпадает с использованием прототипов функций в

C/C++, но в отличие от прототипов, меняет

поведение компилятора при обработке метода!

Исноваоченьпростойкласс

class MyClass { private:

int count; public:

MyClass();

~MyClass();

int printHello();

int getCount() const;

int setCount(int newCount)

};

MyClass::MyClass() { count = 0; } MyClass::~MyClass() {}

int MyClass::printHello() { cout << "Hello!"; } int MyClass::getCount() const { return count; } int setCount(int newCount) { count = newCount; }

Размещениеклассоввпроектах

Общепринятаяпрактикаразмещение

объявленийклассоввзаголовочныхфайлах*.h, аихреализации– вфайлах*.cpp (*.cxx).

Довольночасто:1класс1модуль(.h + .cpp).

Повышениемодульностипроекта

Каждыйклассможетбытьподключендля

дальнейшегоиспользованияприпомощи директивы#include “имязаголовочного файла”

Привнесенииизмененийвреализацию методаклассаперекомпиляцииподвергнутся толькоизмененныефайлы

Пример

date.h

class Date

{

public:

void Next(); void Print();

private:

int m_day; int m_month; int m_year;

};

date.cpp

#include “date.h”

void Date::Next()

{

// ...

}

void Date::Print()

{

// ...

}

lab10.cpp

#include “date.h”

int main()

{

Date date1; // ...

return 0;

}

Размещениеклассоввпроектах

Общепринятаяпрактикаразмещение

объявленийклассоввзаголовочныхфайлах*.h, аихреализации– вфайлах*.cpp (*.cxx).

Довольночасто:1класс1модуль(.h + .cpp).

Повышениемодульностипроекта

Каждыйклассможетбытьподключендля

дальнейшегоиспользованияприпомощи директивы#include “имязаголовочного файла”

Привнесенииизмененийвреализацию методаклассаперекомпиляцииподвергнутся толькоизмененныефайлы

Инициализацияатрибутовв описанииконструктора

имя_класса::имя_класса() : атрибут1(значение1), атрибут2(значение2) … {}

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

Объявлениеэкземпляровкласса

Вариант1:

имя_класса идентификатор;

Вариант2:

имя_класса идентификатор(аргументы);

Примеркласса,содержащего

векторзначенийтипаdouble

#include <iostream> using namespace std; class DoubleVector { private:

double * data; unsigned length;

public:

DoubleVector(); DoubleVector(unsigned l); ~DoubleVector();

void SortAsc() {/* не реализовано */}; void SortDesc() {/* не реализовано */};

unsigned GetLength() const { return length; }; void SetLength(unsigned newLength);

double *GetAllData() const { return data; }; double GetElement(int i) const { return data[i]; } void SetElement(int i, double el) { data[i] = el; }

};

Примеркласса,содержащего

векторзначенийтипаdouble

DoubleVector::DoubleVector()

{

length = 0;

cout << "Created!" << endl;

}

DoubleVector::DoubleVector(unsigned l) : length(l)

{

data = new double[l];

cout << "Created!" << endl;

}

DoubleVector::~DoubleVector() { delete data;

cout << "Destroyed!" << endl;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]