是否可以对每个类使用相同的功能

时间:2019-04-09 21:18:07

标签: c++ function class

我有多个类,每个类都有自己的方法。正如您在我的代码中看到的那样,所有这些方法都执行相同的任务。唯一独特的是在类内部定义的titlecodecredit成员的值。

是否有一种编写此代码的方法,以便每个类的单个方法集可以完成每个类的必需任务(使用向该方法发出请求的类中的特定值)?

我是一名大学生,由于这个原因,我不想使用继承,因为我们还没有学到它。

class seng305
{
    string title = "Software design and architecture", code = "SENG305";
    int credit = 4;
public:
    seng305();
    ~seng305();
    string get_info();
    string get_title();
    int get_credit();
};


class comp219
{
    string title = "Electronics in computer engineering", code = "COMP219";
    int credit = 4;
public:
    comp219();
    ~comp219();
    string get_info();
    string get_title();
    int get_credit();
};

seng305::seng305()
{
    cout << '\t' << "Created" << endl;

}
seng305::~seng305()
{
    cout << '\t' << "Destroyed" << endl;
}
string seng305::get_info()
{
    return (code + "-" + title);
}
string seng305::get_title()
{
    return title;
}
int seng305::get_credit()
{
    return credit;
}
//--------------------------------------------------
comp219::comp219()
{
    cout << '\t' << "Created" << endl;

}
comp219::~comp219()
{
    cout << '\t' << "Destroyed" << endl;
}
string comp219::get_info()
{
    return (code + "-" + title);
}
string comp219::get_title()
{
    return title;
}
int comp219::get_credit()
{
    return credit;
}

如您所见,get_info()get_title()get_credit()方法执行相同的操作。

我希望单个get_info()get_title()get_credit()能够完成每个班级的任务。

1 个答案:

答案 0 :(得分:6)

在此示例中,完全没有理由使用单独的类。一个班就足够了,例如:

def encircle_entity(e):
    if e.dxftype()=='INSERT':
        circleCenter = e.dxf.insert
        msp.add_circle(circleCenter, 10, dxfattribs={'layer': 'MyCircles', 'extrusion': e.dxf.extrusion})
        print("Circle entity added")

class course
{
    string title, code;
    int credit;
public:
    course(const string &title, const string &code, int credit);
    ~course();
    string get_info() const;
    string get_title() const;
    int get_credit() const;
};

然后,您只需根据需要创建类的实例,例如:

course::course(const string &title, const string &code, int credit)
    : title(title), code(code), credit(credit)
{
    cout << '\t' << "Created" << endl;
}

course::~course()
{
    cout << '\t' << "Destroyed" << endl;
}

string course::get_info() const
{
    return (code + "-" + title);
}

string course::get_title() const
{
    return title;
}

int course::get_credit() const
{
    return credit;
}

我知道您说过您不想使用继承,但是使用上面的代码作为基础,这可能是下一步的逻辑步骤:

course seng305("Software design and architecture", "SENG305", 4);
course comp219("Electronics in computer engineering", "COMP219", 4);
...

class courseSeng305 : public course
{
public:
    courseSeng305() : course("Software design and architecture", "SENG305", 4) {}
};

class courseComp219 : public course
{
public:
    courseComp219() : course("Electronics in computer engineering", "COMP219", 4) {}
};