您好所有阅读

我正在从教科书中自学C++。

...而且我遇到了很多难以解释的问题,这些问题是:

4。
修改练习3的构造函数,使其在建立每个变量时分配一个新的ID号。 ID号应输出到屏幕上。


**请注意:练习3只是在类结构中添加一个Class构造函数-并在添加的构造函数中基本上将所有类私有(private)成员变量设置为'0'。

5。
将构造函数添加到练习4的类中。在调用它们时,它们应该输出ID号。


6。
编写一个构造函数,其参数为ID号。用(练习5)的构造函数重载它,然后编写一个主程序来测试此新构造函数。


**因此,问题:4和5使我感到困惑,因为它们似乎在问相同的问题(即输出I.D编号),而我需要一个以上的“构造函数”来做到这一点(我明白了)。

**问题6实际上是在要求我重载该类声明的多个实例,并以ID号作为参数!!!我很困惑,因为在我的教科书中明确指出,当在主程序中声明了一个类数组时,就不能为构造函数提供参数。

因此,如果有人可以阐明这些问题并阐明他们将如何进行,我将不胜感激。我很欣赏我可能错误地解释了问题,这就是为什么我寻求帮助。

**请注意:类(class)名称:“类(class)教室”并不理想,但这是我从课本问题中复制的!

**还请注意,我已经添加了代表类变量的每个实例的代码来回答(我认为!)练习/问题4。

与上述问题相关的代码为:

#include <iostream>
#include <cstdio>

using namespace std;


  class classroom{

         char name[25];
         int student_id;
         float grades[10];
         float average;
         int num_tests;
         float letter_grade;
         **static int next_student_id;**
  public:
         void enter_name_id(void);
         void enter_grade(void);
         void average_grades(void);
         void letter_grades(void);
         void output_name_id_grade(void);
         classroom();

  };

         **int classroom::next_student_id=1;**

和构造函数:
classroom::classroom(){

          int i;

          num_tests=0;

         **student_id=next_student_id++;**

         **cout<<"\nstudent id: "<<student_id;**

          average=0.0;
          for(i=0;i<10;i++){

            grades[i]=0.0;

          }

          for(i=0;i<27;i++){

             name[i]='-';
          }
          cout<<"\n*****************Finished*****************";
     }

以及主程序声明:
int main()
{
      classroom students[3];
//and so on...
}

并且为问题/练习4添加的代码是:

在类结构中,我添加了以下私有(private)成员变量:



在类结构之外,我将静态变量初始化为1



在构造函数中,我添加了以下代码:基本上,每个类类变量实例的唯一ID输出到屏幕上:



提前谢谢了

最佳答案

问题4和5确实与您提供的内容相同-我会仔细阅读以确保,但这并不是教科书示例第一次出现拼写错误(事实上,我遇到过多次-很多书籍公司在练习时都比较懒惰。

您的静态计数器确实有正确的答案,所以我不用担心-您已经了解了目标并解决了问题。

问题6 ...听起来像是希望您只向该类添加一个额外的构造函数-因此,您将拥有默认的构造函数(必须显式编写,但是已经完成此操作才能进行静态计数器) ,并且您还将拥有一个带整数的单参数构造函数。单参数构造函数不需要使用静态变量,因为它允许用户显式提供ID给类。

继续前进(因为我认为您已经拥有了所有这些功能),因此认为在创建数组时不能向构造函数提供参数也是正确的。要按照建议的那样测试#6,您要么必须制作一个独立的对象(即不是数组),要么要使用std::vector之类的东西或其他提供此功能的容器。

#include <iostream>
#include <vector>

class A {
    public:
        A(int i) { /* Empty */ }
};

int main()
{
    //Creates a new vector holding 5 A's initialized with the 2nd parameter.
    std::vector<A> myVec(5, A(7));
}

请注意,从技术上讲,这将创建一个临时A,该A用于初始化5个 vector 条目。还要注意,std::vector是STL(标准库)的一部分,它基本上是一个动态大小的数组。

09-10 08:44
查看更多