c ++ создать класс, используя заголовки и файлы cpp - PullRequest
0 голосов
/ 05 ноября 2010

я создаю класс, чтобы я мог понять их лучше. когда я создаю класс, для чего нужно использовать заголовочные файлы и cpp?

Ответы [ 3 ]

3 голосов
/ 05 ноября 2010

Заголовочные файлы предназначены для определения класса, а файл cpp - для реализации.Примерно так:

Test.h

class Test
{
public:

  void PrintHelloWorld(void);
};

Test.cpp

void Test::PrintHelloWorld(void)
{
   cout << "Hej på dig världen!";
}
0 голосов
/ 05 ноября 2010

Заголовочный файл должен включать директивы "#include", определение констант и определение методов класса: конструкторов, деструкторов и методов.Думайте об этом, как будто вы определяете интерфейс класса.

Cpp должен содержать реализацию.Таким образом, в cpp вы понимаете все, что вы объявили в файле .h.

Вот пример:

CBug.h:

#ifndef CBUG_H
#define CBUG_H

#include <string>
#include <vector>

using namespace std;

enum BugState
{
     ILLEGAL = -1,
     ACTIVE = 0,
     RESOLVED,
     CLOSED     
};

/**
 * CBug - class to describe the record about any bug
 */
class CBug
{
    private:
        string DevName;
        string Project;
        int Id;
        string ErrorDesc;
        BugState State;
        // class constructor
        CBug();


    public:

    // class destructor
    ~CBug();

    /**
     * CreateBug
     * creates a new bug, reads values from string and returns a pointer to a bug
     * @param Params contains all necessary information about bug
     * @return pointer to a newly created bug
     */
    static CBug * CreateBug ( string Params ); 
        // setters
        void SetState( BugState );

        //getters
        string GetDeveloper( );
        int GetId();
        int GetState( );
        bool IsActive( );
        string ToString( );
};

#endif // CBUG_H

CBug.cpp:

// Class automatically generated by Dev-C++ New Class wizard

#include "CBug.h" // class's header file
#include "CUtil.h"

#include <iostream>
#include <sstream>

// class constructor
CBug::CBug()
{

}

// class destructor
CBug::~CBug()
{

}

CBug * CBug::CreateBug ( string Params )
{
 #if 1     
     cout << "Param string:" << Params << endl;
 #endif
     if( Params.length() == 0 ) {
         return NULL;       
     }

     CBug * Bug = new CBug(); 

     if ( Bug != NULL )
     {
       vector<string> s(5); 
       s = CUtil::StringSplit ( Params, " " ); // разбиваем строку с параметрами на отдельные строки
       cout << s[0] << endl;

       Bug->DevName = s[0];
       Bug->Project = s[1];
       Bug->ErrorDesc = s[3];
       sscanf( s[2].c_str(), "%d", &(Bug->Id) );
       cout << "id: " << Bug->Id << endl;
       Bug->State = ACTIVE;
      }

     return Bug;  
}

string CBug::GetDeveloper()
{
     return DevName;
}

int CBug::GetState()
{
     return State;
}

int CBug::GetId()
{
     return Id;
}

void CBug::SetState ( BugState state )
{
     State = state;
}

bool CBug::IsActive()
{
     return ( State!=CLOSED );
}

string CBug::ToString() // для вывода пользователя
{
      ostringstream   out;
      out << "Id: " << Id << " DevName: " << DevName << " Project: " << Project << " Desc: " << ErrorDesc << " State: " << State;
      return(out.str());
}
0 голосов
/ 05 ноября 2010

Это действительно простой вопрос.Вам, вероятно, следует найти учебник или книгу по C ++, которые могут вам помочь.

Заголовочный файл имеет определение класса.

Файл cpp имеет реализацию класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...