有人能告诉我创建包含类,子类和方法的.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}
答案 0 :(得分:5)
您是file.hpp
还是file.h
只是一个偏好问题。就个人而言,我使用.hpp
来表示C ++而不是C。
在C ++中,与Java不同,全局命名空间中的类不是public
或private
。但是,您可以通过各种方式隐藏或限制对类的访问。例如:
private
放在另一个班级。其他几点:
file.hpp
的语法为#include "file.hpp"
firstClass
和secondClass
类具有虚方法和默认析构函数。您应该制作析构函数public
和virtual
,或protected
和非 - virtual
班级定义:
class SomeClass {
// code
};
当你需要指向它的指针时,你写的是SomeClass* myPointer;
,而不是你声明first
和sec
的方式。
您通常希望将类声明和/或定义与函数声明一起放在头文件中。实现在源文件中。例如:
// Header file:
class FirstClass {
public:
FirstClass();
void DoSomething();
};
// Source file:
FirstClass::FirstClass()
{
// code
}
void FirstClass::DoSomething()
{
// code
}
我建议你选择一本C ++教科书,其中充分涵盖了这些基础知识。我的个人建议是Accelerated C++。