gpt4 book ai didi

c++ - 我可以在 C++ 中将类成员变量定义为多种数据类型吗?

转载 作者:行者123 更新时间:2023-12-02 18:09:31 28 4
gpt4 key购买 nike

所以我有一个类定义,我想添加一个成员变量,它可以是 2 个不同类中的一个,具体取决于运行此代码的操作系统。

有没有办法在 C++ 中执行此操作,以便我可以在初始化 MyOperatingSystem 时根据某些参数或变量为“operating_system”成员变量初始化不同的类?

#include <iostream>
#include "Win.h"
#include "Lin.h"

using namespace std;

typedef int os_type;
enum {Win, Lin};

class MyOperatingSystem {
public:
MyOperatingSystem(int ver, string n, os_type os);
private:
int version;
string name;
// operating_system // want this to be either (Windows win | Linux lin)

};

// constructor
MyOperatingSystem::MyOperatingSystem(int ver, string n, os_type os){
version = ver;
name = n;
if (os == Win){
// operating system = Windows(int i);
}
else{
// operating system = Linux(int i)
}
}

Win.h和Lin.h如下

Win.h:

#include <windows.h>
class Windows{
public:
Windows(int i){
integer = i;
mystring = "WinString";
}
private:
int integer;
LPCWSTR mystring;
};

林.h:

#include <termios.h>
class Linux{
public:
Linux(int i){
integer = i;
mystring = "LinString";
}
private:
int integer;
cc_t* mystring;
};

最佳答案

我建议做出编译时决定。

例子:

#pragma once // MyOperatingSystem.h

class IOperatingSystem {
public:
virtual ~IOperatingSystem() = default;

// misc operations:
virtual foo() = 0;
};

#ifdef _WIN32
#include "internal/Win.h" // in here MyOperatingSystem implements IOperatingSystem
#else
#include "internal/Lin.h" // in here MyOperatingSystem implements IOperatingSystem
#endif

此处您不一定需要 virtual,但它有助于在设计时确保两个实现遵循相同的接口(interface)。

关于c++ - 我可以在 C++ 中将类成员变量定义为多种数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72620294/

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