Оголошення класу cBook
Для цього внесемо до файлу Book.h – файлу специфікації класу CBook наступний програмний код:
// файл Book.h - специфікація класу CBook
#pragma once
class CBook
{
private:
char m_author [ 50 ] ; // автор
char *m_pTitle ; // вказівник на назву
int m_year ; // рік видання
public:
CBook ();
virtual ~ CBook ();
// методи встановлення значень полів
void setAuthor ( const char* ) ;
void setTitle ( const char* ) ;
void setYear ( const int ) ;
// методи повернення значень полів
char* getAuthor ( void ) ;
char* getTitle ( void ) ;
int getYear ( void ) ;
} ;
Визначення ( реалізація) класу cBook
Визначення оголошених у специфікації класу методів розташовується в окремому файлі з розширенням .срр, називаному файлом реалізації класу.
Коли файли специфікації й реалізації класу перебувають у різних файлах, у заголовок функції-члена потрібно включати область видимості відповідно до формату:
тип_функції-члена ім'я_класу :: ім'я_функції-члена ( список параметрів )
Оператор дозволу області видимості :: використається в заголовку з тією метою, щоб всі оголошені усередині класу ідентифікатори оброблялися усередині їхнього власного простору імен, а також щоб уникнути неоднозначності використання імен. Запис тіла методу нічим не відрізняється від запису у звичайній функції. У файл реалізації класу потрібно включати файл зі специфікацією класу, а також необхідні при визначенні функцій заголовки стандартних бібліотек.
У реалізації методів-конструкторів при демонстрації їх роботи видається значення покажчика this, який є скритою внутрішньою змінною класу і вказує на сам об’єкт, тобто на його адресу в оперативній пам’яті.
Для внесення змін до файлу реалізації класу потрібно вибрати у браузері FileView файл Book.cpp та внести програмний код, призначений для визначення конструкторів та деструктору класу та його методів.
Файл реалізації класу повинен бути відредагований у відповідності з текстом:
// Book.cpp - реализация класса CBook
#include "stdafx.h"
//using namespace std ;
#include "Book.h"
#include "iostream.h"
#include <string>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
// установить автора
void CBook :: setAuthor ( const char* author )
{ cout << "\n rabotaet setAuthor \n"<< author<< endl;
m_author [ 0 ] = '\0' ;
strcat(m_author, author);
cout << m_author<<endl;
cout << "\notrabotal setAuthor\n"<<endl;
}
// установить название
void CBook :: setTitle ( const char* title )
{
cout << "\nrabotaet setTitle\n"<<endl;
cout << "\nstrlen ( title ) = "<<strlen ( title )<<endl;
cout << "\ntitle = "<< title <<endl;
m_pTitle = new char [strlen ( title )+ 1] ;
m_pTitle [ 0 ] = '\0' ;
strcat(m_pTitle, title);
cout << m_pTitle<<endl;
cout << "\notrabotal setTitle\n"<<endl;
}
// установить год издания
void CBook :: setYear ( const int year )
{ m_year = year ; }
// вернуть автора
char* CBook :: getAuthor ( void )
{ return m_author ; }
// вернуть название
char* CBook :: getTitle ( void )
{ return m_pTitle ; }
// вернуть год издания
int CBook :: getYear ( void )
{ return m_year ; }
// конструктор по умолчанию
CBook :: CBook ( ) : m_year ( 0 ), m_pTitle ( " " )
{ m_author [ 0 ] = '\0' ;
cout << "default CONSTRUCTOR\nthis = " << this ;
}
// деструктор
CBook::~CBook()
{
delete [ ] m_pTitle ;
cout << "DESTRUCTOR\t " << this << endl ;
}