/*
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 张传新
* 完成日期: 2012 年 3 月 28 日
* 版 本 号: 1
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:……
* 算法设计:……
*/
#include<iostream>
using namespace std;
class A
{
private:
int *a;
int n;
int MaxLen;
public:
A(): a(0), n(0), MaxLen(0) {} //定义构造函数
~A(); //定义析构函数
A(int *aa, int nn, int MM);
int GetValue(int i) {return a[i];}
};
A::A(int *aa, int nn, int MM)
{
n=nn;
MaxLen=MM;
if(n>MaxLen)
exit(1);
a=new int[MaxLen];
for(int i=0;i<MaxLen;++i) //以i为循环变量把aa数组中每个元素值传送给a数组的对应元素中
{
a[i]=*(aa+i);
};
}
A::~A() //析构函数的类外定义,释放指针型数据a所指向的空间
{
delete[] a;
}
void main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10};
A r(b,9,10);
int i,s=0;
for(i=0;i<10;++i) //以i为循环变量,把r对象的a数据成员中的每个元素值依次累加到s中
{
s=s+r.GetValue(i);
} ;
cout<<"s="<<s<<endl;
system("pause");
}
彩色部分为填空部分
运行结果:
经验积累:
执行析构函数的情况:1.如果在一个函数中定义了一个对象(它是自动局部对象)
,当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数;
2.static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在
main函数结束或调用exit函数结束时,才调用static局部对象的析构函数;3.如果
定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit
函数),调用该全局对象的析构函数;4.如果用new运算符动态的建立了一个对象,
,当用delete运算符释放该对象时,先调用该对象的析构函数。
上机感言:
我决定每天在做完C++作业的同时,额外的抽出至少半小时的时间编写C++程序,以
弥补自己在上个学期漏下的知识点,希望自己能坚守住自己的诺言。