面向对象程序填空题

 三、阅读程序题

1.阅读下面程序,给出程序的运行结果。

1)

#include<iostream>

using namespace std;

void Fun(int x,int *py,int& z){

   x++;  (*py)--;  z*=2;

   cout<<"x="<<x<<","<<"*py="<<*py<<","<<"z="<<z<<endl;

}

void main(void){

   int a=1,b=2,c=3;

   Fun(a,&b,c);

   cout<<"a="<<a<<","<<"b="<<b<<","<<"c="<<c<<endl;

}

2)

#include<iostream>

using namespace std;

void  P(int  w){

       if (w==0)  return;

       P(w-1);

       cout<<w;

       P(w-1);

}

void main(void){   P(3);   }

3)

#include<iostream>

using namespace std;

void print(int,int,int (*p_fun)(int,int));

int add(int,int);

int substract(int,int);

void main(void){

  int a=10,b=-20,Choice;

  int(*p)(int,int);

  cout<<"Enter your choice:";

  cin>>Choice;

  switch(Choice){

     case 1: p=add; break;

     default: p=substract;

  }

  print(a,b,p);

}

int add(int x,int y){ return x+y; }

int substract(int x,int y){ return x-y;  }

void print(int i,int j,int (*p_fun)(int,int)){

   cout<<"The result is "<<p_fun(i,j)<<endl;

}

程序运行时:

Enter your Choice:1

2.阅读下面程序,回答相关问题。 

1)

#include <iostream>

using namespace std;

struct Student{

   int num;

   char name[20];

   char sex;

   int age;

};

void main(void){  

    Student* Fun(Student *,int);

   Student stu[]={ {11,"lilin",'M',18},{3,"sunny",'M',24},

                   {2,"zhao",'M',20},   {4,"Liu yanhong",'F',30} };

   int size=sizeof(stu)/sizeof(Student);

   Student *p=Fun(stu,size); 

cout<<p->num<<'\t'<<p->name<<'\t'<<p->age<<endl;

}

Student* Fun(Student *s, int n){  //问题a和b

   int index=0,i;

   for(i=1;i<n;i++)

       if(s[i].num>s[index].num) index=i;

   return s+index;    

}

  1.  给出函数Fun()的功能;
  2.  若将函数Student* Fun(Student *s, int n)的返回值类型改为Student& ,要完成相同的功能,给出源程序中其它需要修改的语句并作相应的修改。

2) 

#include<iostream>

using namespace std;

class Student{

    char* name;

    int age;

    float score;

  public:

     Student(char* n,int a,float s):age(a),score(s){

       cout<<"constructing..."<<n<<endl;

       name=new char[strlen(n)+1];

       strcpy(name,n);

    }

   ~Student(){

     cout<<"destructing..."<<name<<endl;;

     delete[] name;

   }

};

void main(void){

   Student s("Liu",18,86.5);

   Student *p_st1=new Student("Chen",18,86.5);

   delete p_st1;  //问题b)

}

a) 给出程序的运行结果;

b) 若去掉语句delete p_st1;,程序运行结果会不同吗?

3) 

#include<iostream>

using namespace std;

class Point{

  private:

    char *name;

    float X,Y;

public:

    Point(char* s,float a,float b){

        X=a;Y=b;

       name=new char[strlen(s)+1];

       strcpy(name,s);

        cout<<"Initializing Point: "<<name

<<", X="<<X<<" ,Y="<<Y<<endl;

   }

    Point(Point &p);

    float GetX(){ return X; }

    float GetY(){ return Y; }

    void Show(){ cout<<"name:"<<name<<", X="<<X<<",Y="<<Y<<endl; }

    ~Point(){

       cout<<"deleting Point: "<<name<<", "<<X<<","<<Y<<endl;

      delete []name;

   }

};

class Line{

   Point p1,p2;

public:

   Line(char* p1name,float x1,float y1,char* p2name,float x2,

float y2):p1(p1name,x1,y1),p2(p2name,x2,y2){

       cout<<"Line constructor."<<endl;

   }

   ~Line(){

       cout<<"Line destructor."<<endl;

   }

};

  

Point::Point(Point &p){ //问题b

   name=new char[strlen(p.name)+1];

   strcpy(name,p.name);

   X=p.X;

   Y=p.Y;

   cout<<"Coping Point: "<<p.name<<","<<X<<","<<Y<<endl;

}

void fun(Point p){  p.Show();   }

void main(void){

   Point A("objA",12,24);

   fun(A);   

   Line L1("p1",1,2,"p2",3,4);

}

a)(6分)给出程序的运行结果;

b)(3分)给出拷贝构造函数Point(Point &p)的功能。是否可以去掉该函数?

4)(8分)

#include<iostream>

using namespace std;

class Base{

public:

   int Bvalue;

   Base(int v){

       Bvalue=v;

       cout<<"Base construtor."<<endl;

   }

   int getBvalue(){ return Bvalue; };

};

class D1: public Base{  

public:

   int D1value;

   D1(int v,int b):Base(v){

       D1value=b;

        cout<<"D1 construtor."<<endl;

   }

    int getD1value(){return D1value;}

};

class D: public D1{

public:

   int Dvalue;

   int getDvalue(){ return Dvalue; }

   D(int v1,int v2,int a):D1(v1,v2){

       Dvalue=a;

       cout<<"D  construtor."<<endl;

   }     

};

void main(void){

  D obj(1,2,3);

  cout<<obj.getDvalue()<<endl;

  cout<<obj.getBvalue()<<endl; //问题b)

   cout<<obj.getD1value()<<endl;    

}

a)  给出程序的运行结果;

b)  能否将表达式obj.getBvalue()改为obj.Bvalue?

答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值