C++(十三)对象数组与构造函数

一、一般对象数组初始化

对象数组中的元素同样需要用构造函数初始化。具体哪些元素用哪些构造函数初始化,取决于定义数组时的写法。

#include<iostream>
using namespace std;
class CSample{
public:
    CSample(){        //构造函数 1
        cout<<"Constructor 1 Called"<<endl;
    }
    CSample(int n){   //构造函数 2
        cout<<"Constructor 2 Called"<<endl;
    }
}
int main(){
    CSample arrayl[2];        // array1 数组中的两个元素没有初始化,调用无参构造函数初始化,
    cout<<"stepl"<<endl;
    CSample array2[2] = {3};   //array2 数组中array3[0]初始化了,array3[1] 无初始化,故分别用构造函数 2 和构造函数 1 进行初始化。
    cout<<"step2"<<endl;
    CSample* array3 = new CSample[2];  //动态分配了一个 CSample 数组,这两个元素无参,都用无参构造函数初始化
    delete [] array3;
    return 0;
}
============输出结果=============
Constructor 1 Called
Constructor 1 Called
stepl

Constructor 2 Called
Constructor 1 Called
step2

Constructor 1 Called
Constructor 1 Called

二、多参数对象数组初始化

在构造函数有多个参数时,数组的初始化列表中要显式包含对构造函数的调用

class CTest{
public:
    CTest(int n){ }          //构造函数(1)
    CTest(int n, int m){ }   //构造函数(2)
    CTest(){ }               //构造函数(3)
};
int main()
{
    CTest arrayl [3] = { 1, CTest (1, 2) };    //三个元素分别用构造函数(1)、(2)、(3) 初始化
    CTest* pArray[3] = { new CTest(4) , new CTest(1,2) }; //两个元素指向的对象分别用构造函数(1)、(2)初始化
    return 0;
}

pArray 数组是一个指针数组,其元素不是CTest 类的对象,而是 CTest 类的指针。对 pArray[0] 和 pArray[1] 进行了初始化,把它们初始化为指向动态分配的 CTest 对象的指针,而这两个动态分配出来的 CTest 对象又分别是用构造函数(1)和构造函数(2)初始化的。
pArray[2] 没有初始化,其值是随机的,不知道指向哪里。故只生成了两个 CTest 对象,而不是三个,所以也只调用了两次 CTest 类的构造函数。

已标记关键词 清除标记
相关推荐
题目是一个打印工资单(payrate*hours),数组里有七个对象,需要每个对象的输入时间(hour)乘payRate,最后返回到payTotal里,可是不知道怎么把键盘输入的存入对象数组里,而且总是报错,而且后面函数里的变量好像也有点问题,没用到数组,不知道怎么改啊,急求解答!!!!!非常感谢!! 这是main函数的cpp ``` #include <iostream> #include <iomanip> #include "Payroll.h" using namespace std; int main() { const int NUM_EMP = 7; double value; int num; Payroll employee[NUM_EMP]; cout << "Enter the payRate for the employee: "; cin >> num; for(int i=0;i<NUM_EMP;i++) { cout << "Employee" << i+1 << " : " << "Enter the numbers of hours: "; cin >> employee[i]; } Payroll item(); cout << setprecision(2) << fixed; for(int k=0;k<NUM_EMP;k++) { cout << "The amount of gross pay for employee" << k+1 << ": " << employee[k].getTotalPay << endl; } return 0; } ``` 下面是Payroll.cpp ``` #include "Payroll.h" // Needed for the Rectangle class #include <iostream> // Needed for cout #include <cstdlib> // Needed for the exit function using namespace std; Payroll::Payroll() { hours = 0.0; payRate = 0.0; } void Payroll::setHours(double hou) { if(hou <= 60.00) hours = hou; else { cout << "Please Enter the valid numbers: "; exit(EXIT_FAILURE); } } void Payroll::setPayRate(double pay) { payRate = pay; } ``` 最后是payroll.h ``` #ifndef PAYROLL_H #define PAYROLL_H class Payroll { private: double hours; double payRate; public: Payroll(); void setHours(double); void setPayRate(double); double getHours() const { return hours; } double getPayRate() const { return payRate; } double getTotalPay() const { return hours * payRate; } }; #endif ```
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页