C++中的类成员变量可以定义多种数据类型吗?

2 c++ operating-system class

因此,我有一个类定义,并且我想添加一个成员变量,该变量可以是 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

Win.h和Lin.h如下

Win.h:

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

林.h:

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

Ted*_*gmo 6

我建议做出编译时决定。

例子:

#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
Run Code Online (Sandbox Code Playgroud)

您不一定需要virtual这里,但在设计时它有助于确保两个实现都遵循相同的接口。