我想使用C ++预处理器能够在任何C ++块中编写以下内容。
class Student {
private:
int age;
int grade;
int courses;
}
int main(){
CREATE_STUDENT 15+62+2 ;
}
之前的代码将创建一个包含这3个成员的学生。
我想使用+
运算符重载。
知道怎么做吗? 我完全想要上面提到的语法。
答案 0 :(得分:3)
为什么不使用构造函数:
class Student {
private:
int age;
int grade;
int courses;
public:
Student(int a, int g, int c)
{
age = a;
grade = g;
courses = c;
}
}
int main(){
Student s(15,62,2);
}
答案 1 :(得分:1)
您应该模拟您的类,而不是使用预处理器。
答案 2 :(得分:1)
好吧,我完全不理解为什么你想做这样的事情。但有可能,sorta。
你需要让它比在同一个块中使用多个这样的“构造”更复杂。
#include <iostream>
#define GRADE_STUDENT Student student = (Student)
class Student {
public:
Student(int a): age(a), grade(-1), courses(-1), setup(0) {};
Student& operator+(int p)
{
switch(setup) {
case 0: grade = p; break;
case 1: courses = p; break;
default: /* die */ char *p=0; *p=0;
}
setup++;
return *this;
};
void print()
{
std::cout << age << ", " << grade << ", " << courses << std::endl;
};
private:
int age;
int grade;
int courses;
int setup;
};
int main()
{
{
GRADE_STUDENT 15+62+2 ;
student.print();
}
{
GRADE_STUDENT 15+62 ;
student.print();
}
{
GRADE_STUDENT 15+62+2+3 ; // crash
}
return 42;
}