使用类结构的多个实例重载该类结构的构造函数
Overload constructors for a class structure with more than one instance of that class structure
大家好
我从课本上自学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...
}
- 在哪里声明结构运算符重载
- 为私有结构定义双参数运算符重载
- 重载嵌套结构/类的流插入运算符
- 逗号在重载 ostream 和 istream 在结构中分开
- 重载运算符>>() 表示未知的输入长度/结构
- 类层次结构中的运算符重载
- 为什么我应该重载 () 运算符以在结构而不是类中priority_queue?
- 具有重载方法的可变参数数据结构
- std::cout 不适用于结构的重载"<<"运算符
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- Ho 在标头中声明是结构中的重载运算符?
- 指向结构的指针的运算符重载
- 结构外部的重载运算符
- 无法使用"enable_if"和"is_base_of"将模板函数"operator+"的重载限制到我的类层次结构
- 菱形层次结构中的虚函数重载在 clang 和 gcc 中产生不同的结果
- C++ 无法在 typedef 结构中重载<运算符
- 使用运算符 == 进行结构重载
- 当您可以使用构造函数时,为什么要重载 C++ 类或结构中的 () 运算符(可调用运算符)
- 在结构中重载运算符() C++
- ==运算符使用结构重载