C ++ .hpp和.cpp

lin*_*uxx 1 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;
Run Code Online (Sandbox Code Playgroud)

在file.cpp中

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

std::string firstClass::secondClass::method1()
{
    //code
}
Run Code Online (Sandbox Code Playgroud)

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

extern "C" firstClass* create_object()
{return new firstClass}
extern "C" secondClass* create_object()
{return new secondClass}
Run Code Online (Sandbox Code Playgroud)

Lst*_*tor 5

您是否拥有file.hpp还是file.h只是偏好问题。我个人使用.hppC ++而不是C来表示。

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

  • 让他们private参加另一堂课。
  • 使用名称空间。

其他几点:

  • 包含的语法file.hpp#include "file.hpp"
  • 您的firstClasssecondClass类具有虚拟方法和默认析构函数。你应该让你的析构函数publicvirtual,或protected与非virtual
  • 类通常是这样定义的:

类定义:

class SomeClass {
    // code
};
Run Code Online (Sandbox Code Playgroud)

当您想要指向它的指针时,您应该编写SomeClass* myPointer;而不是声明first和的方式sec

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

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

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

void FirstClass::DoSomething()
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

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