類的初體驗(V)
Description
定義一個類Data,只有一個int型別的屬性和如下方法:
預設建構函式,將屬性初始化為0,並輸出”Data’s default constructor.”。
解構函式,輸出:”Data # is erased.”,其中“#”是屬性值。
int getValue()——獲得屬性值。
void setValue(int)——設定屬性值。
定義一個由Data的物件組成的陣列類DataArray,該類包括1個int型別的屬性和一個Data*型別的屬性,分別為陣列中元素的個數、所有的元素。定義如下方法:
建構函式——引數格式請參考main函式的呼叫方法給出,輸出:”DataArray’s constructor.”。
int getSum()——求所有Data物件屬性值的和。
解構函式——輸出一行”DataArray’s deconstructor.”。
Input
若干個整數。個數大於2個。
第1個N表示後面輸入的元素個數。之後有N個整數。它們用於設定main函式中DataArray的物件datas的陣列元素值。
最後一個整數用於設定main函式中testP指向的物件的值。
Output
見樣例~
Sample Input
10 1 2 3 4 5 6 7 8 9 10 1222
Sample Output
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
Data’s default constructor.
DataArray’s constructor.
Sum is 55
Data’s default constructor.
Data 1222 is erased.
Data 10 is erased.
Data 9 is erased.
Data 8 is erased.
Data 7 is erased.
Data 6 is erased.
Data 5 is erased.
Data 4 is erased.
Data 3 is erased.
Data 2 is erased.
Data 1 is erased.
DataArray’s deconstructor.
Data 0 is erased.
HINT
Append Code
append.cc,
int main()
{
int i, n;
Data test, *testP;
cin>>n;
int tmp[n];
for (i = 0; i < n; i++)
cin>>tmp[i];
DataArray datas(n, tmp);
cout<<"Sum is "<<datas.getSum()<<endl;
testP = new Data;
cin>>n;
testP->setValue(n);
delete testP;
return 0;
}
AC程式碼
#include <iostream>
using namespace std;
class Data
{
private:
int _a;
public:
Data():_a(0){cout<<"Data’s default constructor."<<endl;}
~Data(){cout<<"Data "<<_a<<" is erased."<<endl;}
int getValue(){return _a;}
void setValue(int a){_a=a;}
};
class DataArray
{
private:
int sum;
Data* p;
public:
DataArray(int n,int tmp[])//這裡注意tmp[]的寫法
{
sum=n;
p=new Data[n];//要求輸出物件建立的過程//這裡一定要記住,是Data型別的,而不是int型別,分配空間兩邊要相互匹配;
for(int i=0;i<n;i++)
p[i].setValue(tmp[i]);//注意這裡不能用p[i]=tmp[i]這樣的賦值方式,如果用這樣的賦值方式的話,會呼叫建構函式,會析構,這樣的話就會多出很多個析構;
cout<<"DataArray’s constructor."<<endl;
}
int getSum()
{
int su=0;
for(int i=0;i<sum;i++)
su+=p[i].getValue();
return su;
}
~DataArray(){delete []p;cout<<"DataArray’s deconstructor."<<endl;}//這裡千萬別忘了釋放空間;
};
int main()
{
int i, n;
Data test, *testP;
cin>>n;
int tmp[n];
for (i = 0; i < n; i++)
cin>>tmp[i];
DataArray datas(n, tmp);
cout<<"Sum is "<<datas.getSum()<<endl;
testP = new Data;
cin>>n;
testP->setValue(n);
delete testP;
return 0;
}
1、可以不用動態陣列,一般動態和和靜態陣列可以互換使用,但是若要求輸出物件建立的過程,即要需要多少個類就建立多少個類,則必須用動態
2、這個題要求物件建立過程