C ++,具有set和get函数的Student Class

时间:2013-05-30 03:38:29

标签: c++ class object

我已经尝试为学生信息(姓名,IDno和学位)写一个班级,这些信息将被打印在屏幕上;但我不知道错误在哪里?!

#include <iostream>
#include <conio.h>
using namespace std;

class Student {
private:
    char name;
    int idnumber;
    char degree;
public:
    Student(char,int,char);
    void setName(char n){name = n;}
    int getName(){return name;}
    void setIdnumber(char id){idnumber = id;}
    int getIdnumber(){return idnumber;}
    void setDegree(char d){degree = d;}
    int getDegree(){return degree;}
};
Student::Student(char n,int id,char d){
    name = n;
    idnumber = id;
    degree = d;
}

int main(){
    Student s1, s2;
    s1.setName(Sara);
    s1.setIdnumber(333);
    s1.setDegree(A);
    s2.setName(Jack);
    s2.setIdnumber(222);
    s2.setDegree(B);
    cout << "name: " << s1.getName() << ",IDnumber: " << s1.getIdnumber() << ",Degree: " <<      s1.getDegree() << endl;
    cout << "name: " << s2.getName() << ",IDnumber: " << s2.getIdnumber() << ",Degree: " << s2.getDegree() << endl;

    getch();
    return 0;
}

3 个答案:

答案 0 :(得分:2)

显然,您有以下问题:

 Student s1, s2;

这会尝试调用default constructor。但是,您定义了一个带有3个参数的构造函数,这会禁止编译器为您生成默认构造函数,因此您将无法创建这些对象,这会使您的后续成员函数调用失败。

s1.setName(Sara);

setNamechar类型作为参数类型,如果您的意思是字符串文字"Sara",那么您将遇到麻烦。在其他函数调用中可以找到类似的问题。你应该解决这个问题。

与此同时,您应该更喜欢使用member initialization list而不是在构造函数体中使用赋值来初始化您的成员。

  Student::Student(char n,int id,char d): name(n), idnumber(id), degree(d){}

确保您的成员按name, idnumber, degree的顺序声明。

答案 1 :(得分:1)

char是单个字符,而不是字符串。尝试使用std :: string代替。

另外,要声明一个字符串文字,用引号括起你的字符串“” 例如:

s1.setName("Sara");

另外,要使用std :: string,您需要#include <string>

答案 2 :(得分:0)

您的代码存在一些问题

char name; 

name这里只是一个char文字,所以当你尝试将字符串Sara传递给它时,它只会存储一个文字。因此,将名称更改为数组或指针

char name[10] or char *name

同时传递名字时会传递双引号,例如“Sara”。将函数中的所有形式参数更改为char数组或指针。

Student s1, s2;

这里创建对象s1和s2时,它将调用默认构造函数,你没有提供,所以在代码中包含默认构造函数

Student(){}

s1.setDegree(A);

这里你试图传递一个文字而不是一个变量,所以引用它

s1.setDegree('A');

C ++提供了字符串数据类型,它很容易用于char或char [],所以使用它。您可以像使用其他数据类型(如int,double)一样对其进行操作。 这将避免您使用strcpy()复制字符串来指定数组长度的麻烦。

string name;