c ++ .hpp和.cpp

时间:2011-05-05 09:18:35

标签: c++ linux

有人能告诉我创建包含类,子类和方法的.hpp和.cpp的正确方法是什么?我必须使用export "C" firstClass* create_object { return new firstClass; }吗? (我在C ++工作。)我应该file.hpp还是file.h

#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;

在file.cpp

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

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

现在如果我必须extern每个类/子类的对象?如果我想创建一个.so文件并使用dlsym和dlopen来访问类,子类和方法,修改值,发送对特定方法的引用,这是必要的吗?谢谢!

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

1 个答案:

答案 0 :(得分:5)

您是file.hpp还是file.h只是一个偏好问题。就个人而言,我使用.hpp来表示C ++而不是C。

在C ++中,与Java不同,全局命名空间中的类不是publicprivate。但是,您可以通过各种方式隐藏或限制对类的访问。例如:

  • 将他们private放在另一个班级。
  • 使用名称空间。

其他几点:

  • 包含file.hpp的语法为#include "file.hpp"
  • 您的firstClasssecondClass类具有虚方法和默认析构函数。您应该制作析构函数publicvirtual,或protected和非 - virtual
  • 类通常定义如下:

班级定义:

class SomeClass {
    // code
};

当你需要指向它的指针时,你写的是SomeClass* myPointer;,而不是你声明firstsec的方式。

您通常希望将类声明和/或定义与函数声明一起放在头文件中。实现在源文件中。例如:

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

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

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

我建议你选择一本C ++教科书,其中充分涵盖了这些基础知识。我的个人建议是Accelerated C++