所以我尝试用这个声明实现一个特定的类:
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)
答案 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 ++主题。