我正在编写一个学生管理程序。我想在没有字符串和库的情况下学习如何使用指针。每个学生都有一个名字,一个号码和几门课程。我在一个班级里管理学生的数据。名称和课程仅应占用绝对必要的空间。但是,我不确切地知道如何正确地初始化它们并创建构造函数,setter或getter。稍后,我想在一个由一系列学生组成的班级中管理学生班。
我已经尝试过在其他数组中管理课程的char数组。我没有成功。这就是为什么我现在创建一个二维数组的原因。我还想到了为课程和课程组创建额外的类的想法。但这不是我学习如何处理指针的方式。
student.h:
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
class Student{
private:
int myLength_name;
char *myName; //=new char[myLength_name];
int myMatrikel;
int myLength_lv;
char *myLv; //=new char[myLength_lv];
//char **myLvs[30];
int myAnzLv;
public:
Student();
Student(char *name_chars, int length_name, int matrikel, int length_lv, char **lv_chars[][30]);
char &name_chars() const { return *myName; }
int matrikel() const { return myMatrikel; }
int length_name() const { return myLength_name; }
int length_lv() const { return myLength_lv; }
char &lv_chars() const { return *myLv; }
};
#endif // STUDENT_H
student.cpp:
Student::Student() :
myLength_name(0),
myName(nullptr),
myMatrikel(0),
myLength_lv(0),
myLv(nullptr),
myAnzLv(0)
{}
Student::Student(char *name_chars, int length_name, int matrikel, int length_lv, char *lv_chars[][30]):
myLength_name(length_name),
myName(name_chars=new char[myLength_name]),
myMatrikel(matrikel),
myLength_lv(length_lv),
myLv(lv_chars=new char[myLength_lv][30]),
{}
有人可以帮助我创建没有错误的班级学生吗?我的指针真的不是很好,并且到目前为止还没有找到有用的手册。 提前致谢。 埃里克
答案 0 :(得分:0)
@MPops 非常感谢您的帮助。希望我能正确实施您的代码。这两个文件现在看起来像这样,它们不会产生错误: student.h:
class Student{
private:
char *myName;
int myMatrikel;
char *myLv; //=new char[myLength_lv];
char * * myLvs = new char*[30];
int myAnzLv;
public:
Student();
Student(char *name_chars, int matrikel, char *lv_chars);
char name_chars() const { return *myName; }
int matrikel() const { return myMatrikel; }
char lv_chars() const { return *myLv; }
};
student.cpp:
Student::Student() :
myName(nullptr),
myMatrikel(0),
myLv(nullptr),
myLvs(nullptr),
myAnzLv(0)
{}
Student::Student(char *name_chars, int matrikel, char *lv_chars):
myMatrikel(matrikel)
{
myName = new char[strlen(name_chars)+1];
strcpy(myName, name_chars);
myLv = new char[strlen(lv_chars)+1];
strcpy(myLv, lv_chars);
}
````
答案 1 :(得分:-1)
当创建一个具有char指针的类(用作动态char数组)时,我不相信您将能够使用构造函数的初始化列表功能。您首先应该通过...来验证它是否可以正常工作。
myName = new char[strlen(name_chars)+1];
strcpy(myName, name_chars);
这是执行此操作的最基本方法。但是,如果由于某种原因数据输入不正确(\0
中没有name_chars
字符),它并不是特别安全。但这是一个开始。
我也会研究strncpy
。
要创建动态字符数组的数组... 像[“数学”,“语言”,“写作”,“历史”] ...
您需要一个array
个动态char数组。
char * course = new char[100]; // this is one char array of length 100.
char * * courses = new char*[10]; // this is 10 char pointers
courses[0] = new char[100]; // now, the first char pointer in courses
// is a dynamic array of length 100.
...
courses[9] = new char[100];
courses[10] = new char[100]; //!!!! THIS IS WRONG. Courses doesn't have 11 items in it.
// you can only use indexes 0-9 (10 char pointers)