使用类结构的多个实例重载该类结构的构造函数

Overload constructors for a class structure with more than one instance of that class structure

本文关键字:结构 重载 构造函数 实例      更新时间:2023-10-16

大家好

我从课本上自学c++。

…他们给了我一系列的问题,我在解释上有困难,这些问题是:

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

**请注意:练习3只是在类结构中添加了一个类构造函数,并且在添加的构造函数中基本上将所有类私有成员变量设置为'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教室:next_student_id = 1;

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

student_id = next_student_id + +;

* * cout<& lt; nstudentid: "<</blockquote>

提前致谢

问题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(标准库)的一部分,它基本上是一个动态大小的数组。

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

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