如果我有一个c ++类,例如:
class Student
{
public:
string name;
int assigned_number;
};
并且我想在每个实例中使用名称或数字,但不能同时使用两者,是否有一种方法可以使它成为Or
类型,而只需要其中之一?
答案 0 :(得分:6)
如果 您使用的是 C ++ 17或更高版本,则可以使用<variant>
中的std::variant
:
#include <iostream>
#include <variant> // For 'std::variant'
class Student
{
public:
std::variant<std::string, int> name_and_id;
};
int main() {
Student stud; // Create an instance of student
// Pass a string and print to the console...
stud.name_and_id = "Hello world!";
std::cout << std::get<std::string>(stud.name_and_id) << std::endl;
// Pass an integer and print to the console...
stud.name_and_id = 20;
std::cout << std::get<int>(stud.name_and_id) << std::endl;
}
std::variant
是C ++ 17的新增功能,旨在替换C中的并集,并且在出现错误的情况下会出现异常...
答案 1 :(得分:-1)
您可以使用联合。
#include <string>
class Student
{
// Access specifier
public:
Student()
{
}
// Data Members
union
{
std::string name;
int assigned_number;
};
~Student()
{
}
};
int main()
{
Student test;
test.assigned_number = 10;
test.name = "10";
return 0;
}