有关课程和实施的问题

时间:2014-08-21 13:41:11

标签: c++

所以我尝试用这个声明实现一个特定的类:

class Student
{
    public:
        Student ();
        Student (int, int);
        ~Student ();
        void setMod (int, int);
        void setId (int);
        void setScore (int);
        int getId () const;
        int getScore () const;
        void print () const;

    private:
        int idNo, score, mod;
};

Student::Student ()
{
    idNo = -999;
    score = -999;
}

Student::Student (int idNo, int score)
{
    this -> idNo = idNo;
    this -> score = score;
}

Student::~Student ()
{
    static int i = 0;
}

void Student::setMod (int idNo, int size)
{
    this -> mod = idNo % size;
}

void Student::setId (int idNo)
{
    this -> idNo = idNo;
}

void Student::setScore (int score)
{
    this -> score = score;
}

int Student::getId () const
{
    return idNo;
}

int Student::getScore () const
{
    return score;
}

void Student::print () const
{
    cout << idNo << "\t\t" << mod << "\t" << score << endl; 
}

然后我对这些实现有疑问:

1

if (table [k].getId () == -999)
        {
            table [k].setId(idNo);
            table [k].setScore(score);
            table [k].setMod(idNo, score);
        }

2

   Student *table;
   int tSize = 20;
   table = new Student [tSize];
        for (int i = 0; i < tSize; i++)
            table [i] (-999, -999);

我的问题是:

在1,我得到error: request for member 'method', which is of non-class type 'int'.

在2,我得到error: no match to call (class) (int, int)

有人可以帮助我理解我在这里做错了什么吗?注意到我还没有覆盖向量,所以我不得不使用一组对象。

3 个答案:

答案 0 :(得分:2)

第二个错误与此行有关:

table [i] (-999, -999);

您拨打不存在的Student::operator()(int, int)

我想你想在i的数组元素中分配一个新的Student。这可以通过

来实现
table [i] = Student(-999, -999);

但这会导致运行时错误,因为表未初始化。我建议使用std::vector而不是动态数组。您的整个表初始化将如下所示:

std::vector<Student> table(20, Student(-999, -999));

另一个优点是您不必担心释放资源(delete[] table;没有必要)

答案 1 :(得分:0)

将第二个示例更改为

#include <vector>
...
std::vector<Student> table;
int tSize = 20;
for (int i = 0; i < tSize; i++)
    table.push_back( Student(-999, -999));

或者,如果您不能使用vector

int tSize = 20;
Student *table = new Student[tSize];
for (int i = 0; i < tSize; i++)
    table[i] = Student(-999, -999);
...
delete[] table;

第一个看起来没问题,如果table被声明为第二个。

答案 2 :(得分:0)

这是一个使用您定义的 Student 类的工作主体:

int main() {
     int totNumStudent = 20;
     Student* table = new Student[totNumStudent];

     // Your table contains all the students initialized using the constructor
     // with no-parameters

     for(int i = 0; i < totNumStudent; i++) 
         std::cout << table[i].getId() << std::endl;

     delete [] table; // deallocate the memory for the table
}

我认为你需要阅读一本写得很好的C ++书。它们有很多。

我觉得向你推荐Accelerated C++这很简单,让你了解基本的C ++主题。