C++ 通过指针访问数组
我想通过OOP创建一个类似数据库的类。在这个类中,有3个数组作为表中的列。我通过C++ 通过指针访问数组,c++,class,oop,data-structures,syntax-error,C++,Class,Oop,Data Structures,Syntax Error,我想通过OOP创建一个类似数据库的类。在这个类中,有3个数组作为表中的列。我通过insert()函数插入数据,并通过printEntries()函数打印数据。但是该函数不能访问数组来检索数据 #include <iostream> #include <sstream> #include <fstream> #include <string> using namespace std; class subject{ public:
insert()函数
插入数据,并通过printEntries()函数
打印数据。但是该函数不能访问数组来检索数据
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
class subject{
public:
int numOfStudents;
string subjectId;
int * marksArray;
int * indexArray;
char * gradeArray;
int index ; // index for inserting data
subject(int students , string subjectName){
numOfStudents = students;
subjectId = subjectName;
this->index =0 ;
//creating and pointing to arrays
int A[numOfStudents]; marksArray = A;
int B[numOfStudents]; indexArray = B;
char C[numOfStudents]; gradeArray = C;
}
void insert(int studentId , int mark , char grade){
indexArray[index] = studentId;
marksArray[index] = mark;
gradeArray[index] = grade;
this->index = this->index +1;
}
int getNumberOfEntries(){
return index ;
}
void printEntries(){
cout<< indexArray[0] << " O" << marksArray[0] << " " << gradeArray[0] << endl;
cout<< indexArray[1] << " OOO" << marksArray[1] << " " << gradeArray[1] << endl;
cout<< indexArray[2] << " OO" << marksArray[2] << " " << gradeArray[2] << endl;
}
};
int main(int argc, char const *argv[]){
subject S(10,"Mathematics");
cout<<S.subjectId<<endl;
cout<<S.numOfStudents<<endl;
S.insert(35,34,'A');
S.insert(33,34,'B');
S.insert(54,34,'C');
S.insert(21,34,'D');
S.insert(14,34,'F');
S.printEntries();
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
班级科目{
公众:
国际学生;
字符串主语;
int*marksArray;
int*索引数组;
字符*数组;
int index;//用于插入数据的索引
主题(int students,字符串subjectName){
学生=学生;
subjectId=subjectName;
这个->索引=0;
//创建并指向数组
int A[numOfStudents];marksArray=A;
int B[numo];indexArray=B;
char C[numOfStudents];gradeArray=C;
}
无效插入(整数studentId、整数标记、字符等级){
indexArray[索引]=学生ID;
marksArray[索引]=标记;
gradeArray[索引]=等级;
此->索引=此->索引+1;
}
int getNumberOfEntries(){
收益指数;
}
作废打印条目(){
cout正如@paddy在对您的问题的评论中指出的,您的问题在构造函数中
//creating and pointing to arrays
int A[numOfStudents]; marksArray = A;
int B[numOfStudents]; indexArray = B;
char C[numOfStudents]; gradeArray = C;
您正在做的是保存第一个元素的地址,其余元素在您离开构造函数后消失。幸运的是,它甚至允许您保存第一个插入并引用注释您正在做的是“已定义为未定义的行为”
用std::vectors
替换指针,并在那里插入元素将变得更加容易
class subject
{
public: // It's considered bad practive to have public data members in a class
std::vector<int> marksVector;
std::vector<int> indexVector;
std::vector<char> gradeVector;
// ...
void insert(int studentId , int mark , char grade){
indexVector.push_back(studentId);
marksVector.push_back(mark);
gradeVector.push_back(grade);
// No longer need to worry about index for next insert
}
};
课程主题
{
public://在类中有公共数据成员被认为是不好的做法
std::向量标记向量;
std::向量索引向量;
std::矢量梯度矢量;
// ...
无效插入(整数studentId、整数标记、字符等级){
指数向量。推回(学生ID);
marksVector.向后推(标记);
坡度向量。推回(坡度);
//不再需要担心下一次插入的索引
}
};
正如@paddy在对您的问题的评论中指出的,您的问题在构造函数中
//creating and pointing to arrays
int A[numOfStudents]; marksArray = A;
int B[numOfStudents]; indexArray = B;
char C[numOfStudents]; gradeArray = C;
您正在做的是保存第一个元素的地址,其余元素在您离开构造函数后消失。幸运的是,它甚至允许您保存第一个插入并引用注释您正在做的是“已定义为未定义的行为”
用std::vectors
替换指针,并在那里插入元素将变得更加容易
class subject
{
public: // It's considered bad practive to have public data members in a class
std::vector<int> marksVector;
std::vector<int> indexVector;
std::vector<char> gradeVector;
// ...
void insert(int studentId , int mark , char grade){
indexVector.push_back(studentId);
marksVector.push_back(mark);
gradeVector.push_back(grade);
// No longer need to worry about index for next insert
}
};
课程主题
{
public://在类中有公共数据成员被认为是不好的做法
std::向量标记向量;
std::向量索引向量;
std::矢量梯度矢量;
// ...
无效插入(整数studentId、整数标记、字符等级){
指数向量。推回(学生ID);
marksVector.向后推(标记);
坡度向量。推回(坡度);
//不再需要担心下一次插入的索引
}
};
< /代码>你能不能发布你所得到的输出?1)C++不支持VLAs;2)使用指针/引用到定义的作用域之外的局部定义变量是未定义的行为;3)如果你知道运行时的大小而不是巨大的,那么就考虑模板数组大小,否则使用<代码> STD::向量< /代码>;4)不修改对象的er函数(例如getNumberOfEntries
和printEntries
)应该标记<代码> const <代码> > @ dMARCZAK完成!@ PATY,你有什么建议吗?除了我刚才提供的?你能不能把你得到的输出发布?1)C++不支持VLAs;2)使用指针/引用到定义的作用域之外的局部定义变量是未定义行为;3)考虑如果您在运行时知道数组大小,并且数组大小不是很大,则使用不修改对象的成员函数(例如getNumberOfEntries
和printEntries
)应该标记为const
@DMarczak done!@paddy在将数据推入数据库后,你有什么建议吗?你的意思是,除了我刚才提供的内容之外??像这样的对象。我想操作数据。这意味着我想访问列中的行(按索引在数组中的索引)是否可以使用向量???@Nipunachandimal vectors几乎可以做数组所能做的一切,所以是的。在将数据推送到数据库后,如图中的对象。我想操作数据。这意味着我想访问列中的行(按索引访问数组中的索引)使用向量是否可能?@Nipunachandimal向量几乎可以做数组所能做的一切,所以是的。