在c ++中显示结果

时间:2014-11-10 09:14:54

标签: visual-c++

我有一个关于在c ++中使用类的问题。我必须说我是初学者。例如,我有这个类:

class student {
    private:
        char* name;
    public:
        int nrcrt;
        student() {
            name = new char[7];
            name = "Anonim";
            nrcrt = 0;
        }
        student(char* n, int n) {
            this->name = new char[7];
            strcpy(name, n);
            nrcrt = nr;
        }
        ~student() {
            delete [] name;
        }
        char* get_name() {
            return this->name;
        }
}

void main() {
   student group[3];
   group[0] = student("Ana", 1);
   group[1] = student("Alex", 2);
   group[2] = student("Liam", 5);

   for (i=0; i<3; i++) {
       if (group.nrcrt[i] != 0) 
           cout << group[i].get_name() << Endl;
   }
}

我的问题是为什么它会显示不同的字符?

3 个答案:

答案 0 :(得分:0)

首先你的代码无效。

3.cpp:40:18: error: request for member ‘nrcrt’ in ‘group’, which is of non-class type      ‘student [3]’
     if(group.nrcrt[i]!=0)

我也没有申报。请做出适当的改变。

 group.nrcrt[i]

应更改为:

group[i].nrcrt

答案 1 :(得分:0)

不要担心。 C ++看起来有点可怕,但是当你进入它时它是可以的。首先,让我们说所有类都以大写字母开头是好的。其次,你有两个构造函数(默认没有参数,一个或多个,在我们的例子中是一个)。您需要声明一个对象数组的默认值;

Student group[3];

接下来重要的是在那种情况下你不需要其余的构造函数。

group[0]=student("Ana",1);
group[1]=student("Alex",2);
group[2]=student("Liam",5);

记得包括;在课堂宣言结束时。在整个交互过程中将所有语句和表达式放在同一个循环中。这是我发现的错误和修复它们。可能还有更多。

class Student
{
    private:
        char* name;
public:
    int nrcrt;
Student()
{
    name=new char[7];
    strcpy(name, "Anonim");
    nrcrt=0;
}
Student( char* n, int n)
{
    this->name=new char[7];
    strcpy(name, n);
    nrcrt=nr;
}
~Student()
{
    delete [] name;
}

char* get_name()
{
    return this->name;
}

};
int main()
{
    Student group[3];

 for(int i=0;i<3;i++)
 {   
    if(group.nrcrt[i]!=0)
        cout<<group[i].get_name()<<endl;
 } 
  return 0;  
}

答案 2 :(得分:0)

创建数组时,使用默认构造函数 分配给元素时,将调用析构函数,删除name 默认构造函数将文字分配给name,删除该内存具有未定义的行为。

在默认构造函数中,替换

name = "Anonim";

strcpy(name, "Anonim");

您的编译器应该已经警告过您的任务 如果没有,请提高编译器的警告级别 如果是这样,请开始收听编译器的警告。