gpt4 book ai didi

C++ 使用来自不同文件的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:18 26 4
gpt4 key购买 nike

我正在尝试编写一系列程序,这些程序使用相同的主文件 (main.cpp),但具有不同的辅助源文件(object1.cpp、object2.cpp 等)。所以我将基本上像这样编译它们:

g++ -o program1.exe main.cpp object1.cpp
g++ -o program2.exe main.cpp object2.cpp

我想要做的是让 objectN.cpp 定义一个实现了某些方法的类,这些方法将从主文件中调用。源代码看起来像这样:

头文件(object.hpp)

#ifndef INCLUDE_OBJECT_HPP
#define INCLUDE_OBJECT_HPP

class MyObjectInterface
{
public:
MyObjectInterface();
virtual ~MyObjectInterface() {};
virtual void MethodA() = 0;
virtual void MethodB() = 0;
};

#endif

对象1.cpp

#include <iostream>
#include "object.hpp"

using namespace std;

class MyObject : public MyObjectInterface
{
private:
int member;

public:
MyObject(int a) { member = a; }
void MethodA() { cout << member << endl; }
void MethodB() { cout << member*2 << endl; }
};

主要.cpp

#include <iostream>
#include "object.hpp"

using namespace std;

MyObjectInterface *x;

int main()
{
x = new MyObject(1);
x->MethodA();
x->MethodB();
return 0;
}

object2.cpp 将具有与 object1.cpp 相似的结构,但该类将具有不同的数据成员。

我无法让它工作,因为我需要在 main.cpp 中包含 MyObject 的类声明。但是每个 object*.cpp 文件都会声明具有不同成员的 MyObject 类,所以我不能简单地制作一个单独的 object.hpp header 并将其包含在 main 中,因为我需要为不同的对象使用不同的 header 。 main 唯一需要知道的是方法。

我希望我已经清楚地解释了问题;如果不发表评论,我会尽力澄清。似乎应该有一种非常简单的方法来做这样的事情,但我想不出来。

谢谢

最佳答案

can't get this to work, because I need to include the the class declaration of MyObject in main.cpp

不,你不知道。制作工厂方法

*.h:

MyObjectInterface* makeObject();

*.cpp:

MyObjectInterface* makeObject(){
return new MyObject;
}

但是,在不同文件中声明具有相同结构的同名类可能会在某些情况下混淆一些编译器(很少见,但它可能会发生)。

此外,更好的解决方案是重新考虑您的程序结构。因为您的派生类应该有不同的数据成员,这意味着您可能需要访问这些数据成员。因为您可能需要访问这些内存,所以您需要了解有关该类的一些,因此您必须将其声明放入标题中。

另一个问题是类代表某种概念,因此选择唯一的名称应该很简单。如果您有许多具有相同名称的不同类,您可能会遇到设计问题 - 您的类不代表独特的概念,并且您不必要地创建了太多类。

关于C++ 使用来自不同文件的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10825384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com