C ++预处理器和operator +重载

时间:2012-01-29 13:23:44

标签: c++ operator-overloading c-preprocessor

我想使用C ++预处理器能够在任何C ++块中编写以下内容。

class Student {
private:
    int age;
    int grade;
    int courses;

}

int main(){
    CREATE_STUDENT 15+62+2 ;
}

之前的代码将创建一个包含这3个成员的学生。 我想使用+运算符重载。

知道怎么做吗? 我完全想要上面提到的语法。

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;
}