2011-05-05 3 views
1

클래스, 하위 클래스 및 메서드를 포함하는 .hpp 및 .cpp을 만드는 올바른 방법은 무엇입니까? export "C" firstClass* create_object { return new firstClass; }을 사용해야합니까? (C++로 작업 중입니다.) file.hpp 또는 file.h을 사용해야합니까? C++ .hpp 및 .cpp

#include file.hpp 
firstClass::firstClass() 
{ 
    sec = new firstClass::secondClass(); 
} 

std::string firstClass::secondClass::method1() 
{ 
    //code 
} 

file.cpp

에서

#include <string> 

//public ?? how can i have this? 
class firstClass 
{ 
public: 
    firstClass(); 

    class secondClass 
    { 
    public: 
     secondClass(); 
     std::string name; 
     virtual std::string method1(); 
    } *sec; 

    virtual void DoSomething(); 
} *first; 

// And for a private class? 

class private *priv; 

그리고 지금은 extern에 각 클래스/서브 클래스 객체가 있다면? .so 파일을 만들고 dlsym 및 dlopen을 사용하여 클래스, 하위 클래스 및 메서드에 액세스하고 값을 수정하고 특정 메서드에 대한 참조를 보내려면 필요합니다. 감사!

extern "C" firstClass* create_object() 
{return new firstClass} 
extern "C" secondClass* create_object() 
{return new secondClass} 
+1

첫 번째 프로그래밍 언어는 C++입니다 ... 다른 언어와 구문을 혼동하는 것 같습니다. 다음을보십시오 : http://www.cplusplus.com/doc/tutorial/classes/ – RedX

+2

[좋은 책] (http://stackoverflow.com/questions/388242/the-definitive-c-book)을 읽어주십시오. -guide-and-list), 전체 기초가 누락되었습니다. – rubenvb

+0

저는 초보자가 아니며 도움이 필요합니다 :). 나는 .h 파일과 같은 물건을 새로 만들고 수업을 내보내는 법을 배웠다. – linuxx

답변

4

당신이 가진 여부 file.hpp 또는 file.h는 취향의 문제이다. 개인적으로는 .hpp을 사용하여 C가 아닌 C++을 나타냅니다.

예를 들어 Java와 달리 C#에서는 글로벌 네임 스페이스의 클래스가 또는 private이 아닙니다. 그러나 다양한 방법으로 클래스에 대한 액세스를 숨기거나 제한 할 수 있습니다. 예 :

  • 다른 클래스에 private을 갖는 경우를 예로들 수 있습니다.
  • 네임 스페이스 사용.

다른 몇 가지 포인트 : file.hpp를 포함한

  • 구문은 귀하의 firstClasssecondClass 클래스는 가상의 방법과 기본 소멸자가 #include "file.hpp"
  • 입니다. 당신은 당신의 소멸자를해야 publicvirtual, 또는 protected 및 비 virtual
  • 클래스는 일반적으로 다음과 같이 정의된다 :

클래스 정의 :

class SomeClass { 
    // code 
}; 

당신이 그것을에 대한 포인터를 할 때, firstsec을 선언하는 방법이 아닌 SomeClass* myPointer;이라고 작성하십시오.

일반적으로 클래스 선언 및/또는 정의를 함수 선언과 함께 헤더 파일에 넣으려고합니다. 구현은 소스 파일에 포함됩니다. 예 :

// Header file: 
class FirstClass { 
public: 
    FirstClass(); 
    void DoSomething(); 
}; 

// Source file: 
FirstClass::FirstClass() 
{ 
    // code 
} 

void FirstClass::DoSomething() 
{ 
    // code 
} 

이러한 기본 사항을 충분히 다룰 수있는 C++ 교과서를 선택하는 것이 좋습니다. 내 개인적인 추천은 Accelerated C++입니다.