重载具有该类结构的多个实例的类结构的构造函数

时间:2011-11-09 19:18:10

标签: c++ arrays class constructor overloading

所有读过的人都

我是从教科书中自学C ++。

......我遇到了一些我在解释方面遇到困难的问题,问题是:

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

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

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

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

**所以问题:4和5让我感到困惑,因为他们似乎在问同样的问题(即输出ID号码),为了做到这一点,我需要不止一个“构造函数”(我得到那个部分) )。

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

因此,如果有人能够阐明这些问题并澄清它们将如何进行,我将非常感谢您的帮助。我很欣赏我可能会错误地解释这些问题,这就是我寻求帮助的原因。

**请注意:班级名称:“班级教室”并不理想,但这是我从教科书问题中复制的内容!

**请注意我已经通过添加Id是类变量的每个实例的代码来回答(我认为!)练习/问题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添加的代码是:

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

**static int next_student_id;**

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

  

int classroom :: next_student_id = 1;

在构造函数中我添加了这段代码:它基本上为每个教室类变量实例输出一个唯一的ID:

  

student_id = next_student_id ++;

     

** cout&lt;&lt;“\ nstudent id:”&lt;

非常感谢提前

2 个答案:

答案 0 :(得分:1)

问题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,用于初始化5个向量条目。另请注意,std :: vector是STL(标准库)的一部分,它基本上是一个动态大小的数组。

答案 1 :(得分:1)

在哪里,第6点,需要有一个类对象数组?

int main()
{       
  classroom studentA(100);
  classroom studentB();
  classroom studentC(200);
  classroom studentD();
  classroom students[100];
  //and so on...
}