本文主要是介绍20240205作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第四章 堆与拷贝构造函数
一 、程序阅读题
1、给出下面程序输出结果。
#include <iostream>
using namespace std;
class example{
int a;
public:
example(int b=5){a=b++;}
void print(){a=a+1;cout<<a<<"";}
void print()const{cout<<a<<endl;}
};
int main(){
example x;
const example y(2);
x.print();
y.print();
return 0;
}
6 2
2、运行程序,写出程序执行的结果。
#include <iostream>
using namespace std;
class Location{
public:
int X,Y;
void init(int initX,int initY);
int GetX();
int GetY();
};
void Location::init(int initX,int initY){
X=initX;
Y=initY;
}
int Location::GetX(){return X;}
int Location::GetY(){return Y;}
void display(Location & rL)
{cout<<rL.GetX()<<" "<<rL.GetY()<<'\n';}
int main(){
Location A[5]={{5,5},{3,3},{1,1},{2,2},{4,4}};
Location *rA=A;
A[3].init(7,3);
rA->init(7,8);
for (int i=0;i<5;i++)
display(*(rA++));
return 0;
}
7 8
3 3
1 1
7 3
4 4
3. 给出下面程序输出结果。
#include <iostream>
using namespace std;
int a[8]={1,2,3,4,5,6,7};
void fun(int *pa,int n);
int main(){
int m=8;
fun(a,m);
cout<<a[7]<<endl;
return 0;
}
void fun(int *pa,int n){
for (int i=0;i<n-1;i++)
*(pa+7)+=*(pa+i);
}
28
4. 给出下面程序输出结果。
#include <iostream>
using namespace std;
class A{
int *a;
public:
A(int x=0):a(new int(x)){}
~A(){delete a;}
int getA(){return *a;}
void setA(int x){*a=x;}
};
int main(){
A x1,x2(3);
A *p=&x2;
(*p).setA(x2.getA()+5);
x1.setA(10+x1.getA());
cout<<x1.getA()<<""<<x2.getA()<<endl;
return 0;
}
10 8
- 阅读下面的程序,写出运行结果:
#include <iostream>
using namespace std;
class Samp{
public:
void Set_i_j(int a, int b){i=a,j=b;}
~Samp(){cout <<"Destroying.." << i <<endl;}
int GetMulti(){return i * j;}
protected:
int i;
int j;
};
int main (){
Samp * p;
p = new Samp[10];
if(!p){
cout << "Allocation error \n";
return -1;
}
for(int j=0; j<10; j++)
p[j].Set_i_j(j,j);
for(int k=0; k<10; k++)
cout<<"Multi[" <<k <<"] is:"<< p[k].GetMulti()<<endl;
delete [] p;
return 0;
}
Multi[0] is:0
Multi[1] is:1
Multi[2] is:4
Multi[3] is:9
Multi[4] is:16
Multi[5] is:25
Multi[6] is:36
Multi[7] is:49
Multi[8] is:64
Multi[9] is:81
Destroying..9
Destroying..8
Destroying..7
Destroying..6
Destroying..5
Destroying..4
Destroying..3
Destroying..2
Destroying..1
Destroying..0
- 写出下面程序的运行结果,请用增加拷贝构造函数的方法避免存在的问题。
#include <iostream>
using namespace std;
class Vector{
public:
Vector (int s = 100);
int& Elem(int ndx);
void Display();
void Set ();
~Vector ();
protected:
int size;
int* buffer;
};
Vector::Vector (int s){
buffer = new int [size = s];
for(int i = 0; i<size; i++)
buffer[i] = i*i;
}
int & Vector::Elem(int ndx){
if(ndx< 0 || ndx>=size){
cout << "error in index" <<endl;
exit (1);
}
return buffer[ndx];
}
void Vector::Display(){
for(int j =0; j< size; j ++)
cout << buffer[j] <<endl;
}
void Vector::Set(){
for(int j =0; j<size; j++)
buffer[j] = j + 1;
}
Vector::~Vector(){
delete [] buffer;
}
int main(){
Vector a(10);
Vector b(a);
a.Set();
b.Display();
return 0;
}
1
2
3
4
5
6
7
8
9
10
- 读下面的程序与运行结果,添上一个拷贝构造函数来完善整个程序。
#include <iostream>
using namespace std;
class CAT{
public:
CAT();
CAT(const CAT&);
~CAT();
int GetAge() const {return * itsAge;}
void SetAge(int age) { * itsAge = age;}
protected:
int * itsAge;
};
CAT::CAT(){
itsAge = new int;
*itsAge = 5;
}
CAT::CAT(const CAT& cat):itsAge(new int(*cat.itsAge)){}
CAT::~CAT(){
delete itsAge;
itsAge = 0;
}
int main(){
CAT frisky;
cout << "frisky's age:" << frisky.GetAge() <<endl;
cout << "Setting frisky to 6...\n";
frisky.SetAge( 6 );
cout << "Creating boots from frisky \n";
CAT boots(frisky);
cout << "frisky's age:" << frisky.GetAge() <<endl;
cout << "boots'age:" << boots.GetAge() <<endl;
cout << "setting frisky to 7...\n";
frisky.SetAge(7);
cout << "frisky's age:" << frisky.GetAge() <<endl;
cout << "boots' age:" << boots.GetAge() <<endl;
}
运行结果为:
frisky's age:5
Setting frisky to 6...
Creating boots from frisky
frisky's age:6
boots' age:6
Setting frisky to 7...
frisky's age:7
boots' age:6
这篇关于20240205作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!