gpt4 book ai didi

c++ - 在 C++ 中扩展后将 header 绑定(bind)到实现

转载 作者:行者123 更新时间:2023-11-28 05:43:06 26 4
gpt4 key购买 nike

我有 PHP 和 Java 的背景,我想用 C++ 做一些事情,这并不像我希望的那么容易。

假设我有一个包含类 Sensor

的头文件(我将其视为接口(interface))

我有多种类型的传感器,但它们都具有基本功能,例如

  • 初始化
  • 阅读

但是,对于每个传感器,它们都以不同的方式实现。

在 PHP 中,我将能够使用 IoC 和依赖注入(inject)将特定实现绑定(bind)到接口(interface)。

如何使用每个传感器的特定实现来扩展“接口(interface)”/ header ?

我想象有这样一个文件结构:传感器.h传感器1.cppsensor2.cpp

其中.cpp 文件都是Sensor 接口(interface)的不同实现。

我的编译器与 C++11 兼容,我更喜欢以"new"方式做事。

最佳答案

通常,在 C++ 中,类的声明及其实现位于两个不同的文件中:头文件 (.h) 通常只包含声明,而 .cpp 文件包含实现。有关此分离的更多详细信息,请参阅此帖子:Separating class code into a header and cpp file .

此外,为了让同一个接口(interface)有不同的实现,最简单的方法是使用继承。下面是一个使用它的简单示例。

#include <vector>
#include <iostream>

// This could be in SensorInterface.h
class SensorInterface
{
public:

virtual void initialize() = 0;
virtual void read() = 0;
virtual void write() = 0;
};

// This could be in SensorImplementation1.h (for definitions) and SensorImplementation1.cpp (for implementation)
class SensorImplementation1 : public SensorInterface
{
public:
virtual void initialize()
{
std::cout << "SensorImplementation1::initialize" << std::endl;
// Here implementation
}
virtual void read()
{
std::cout << "SensorImplementation1::read" << std::endl;
// Here implementation
}
virtual void write()
{
std::cout << "SensorImplementation1::write" << std::endl;
// Here implementation
}
};

// This could be in SensorImplementation1.h (for definitions) and SensorImplementation1.cpp (for implementation)
class SensorImplementation2 : public SensorInterface
{
public:
virtual void initialize()
{
std::cout << "SensorImplementation2::initialize" << std::endl;
// Here implementation
}
virtual void read()
{
std::cout << "SensorImplementation2::read" << std::endl;
// Here implementation
}
virtual void write()
{
std::cout << "SensorImplementation2::write" << std::endl;
// Here implementation
}
};

int main(int argc, char **argv)
{
std::vector<SensorInterface *> sensors;

SensorImplementation1 sensor1;
SensorImplementation2 sensor2;

sensors.push_back(&sensor1);
sensors.push_back(&sensor2);

for(unsigned int i = 0; i < sensors.size(); i++)
{
sensors.at(i)->initialize();
sensors.at(i)->read();
sensors.at(i)->write();
}

return 0;

}

关于c++ - 在 C++ 中扩展后将 header 绑定(bind)到实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724277/

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