2015级C++第10、11周程序阅读(补充) 继承和派生

来源:互联网 发布:如何查看知乎提问者 编辑:程序博客网 时间:2024/04/30 11:01

(1)

#include<iostream>using namespace std;class G{public:    static int m;    G( ){ //构造函数        m++;        cout<<"G begins\n";    }    ~G( ) {        cout<<"G ends\n";        m--;    }};int G::m=0;class D:public G{public:    D( ){ //构造函数        m++;        cout<<"D begins\n";    }    ~D( ){        cout<<"D ends\n" ;        m-- ;    }};int main( ){    D objg;    cout<<G::m<<endl;    return 0;}

(2)

#include<iostream>using namespace std;class  A{private:    int  x;protected:    int y;public:    int z;    A(int a,int b,int c)    {        x=a;            y=b;        z=c;    }    int  Getx() {return x; }    int  Gety() {return y; }    void ShowA() {        cout<< "x="<<x<<'\t';        cout<<"y="<<y<<'\t';        cout<<"z="<<z<<'\n';    }};class B:public A   //修改点(见后面阅读要求){private:    int m,n;public:    B(int a,int b,int c,int d,int e):A(a,b,c)    {        m=d;        n=e;    }    void Show(){        cout<<"m="<<m<<'\t'<<"n="<<n<<'\n';        cout<<"x="<<Getx()<<'\t';        cout<<"y="<<y<<'\t'<<"z="<<z<<'\n';    }    int Sum()    {        return (Getx()+y+z+m+n);    }};int main(){    B b1(1,2,3,4,5);      b1.ShowA();    b1.Show();    cout<< "Sum="<<b1.Sum()<<'\n';    cout<<"x="<<b1.Getx()<<'\t';    cout << "y=" <<b1.Gety()<<'\t';    cout << "z="<<b1.z<<'\n';    return 0;}  

先阅读程序,写出你预想的运行结果,再记录运行结果,如果两者有差异,再读程序给出解释。
观察基类A中成员的访问权限制以及派生类B中对这些成员的访问方法。
请将class B:public A 中的public改为protected或者删除,对程序进行编译,解释出现的情况。

(3)

#include <iostream>using namespace std;class Part  //部件类{public:    Part();    Part(int i);    ~Part();private:    int val;};Part::Part(){    val=0;    cout<<"调用Part的默认构造函数:"<<val<<endl;}Part::Part(int i){    val=i;    cout<<"调用Part的构造函数: "<<val<<endl;}Part::~Part(){    cout<<"调用Part的析构函数: "<<val<<endl;}class Whole: public Part{public:    Whole();    Whole(int,int,int,int);    ~Whole();private:    Part one;    Part two;    int data;};Whole::Whole(){    data=0;    cout<<"调用whole的默认构造函数: "<<data<<endl;}Whole::Whole(int p, int i,int j,int k):     Part(p),one(j),two(i),data(k)  //问题2{    cout<<"调用whole的构造函数: "<<data<<endl;}Whole::~Whole(){    cout<<"调用whole的析构函数: "<<data<<endl;}void f(){    Whole w1;    Whole w2(1,2,3,4);}int main(){    f();    return 0;}  

 先分析程序的执行结果,在上机时运行程序进行对照,再通过单步执行跟踪程序的运行,达到理解基类、派生类中构造函数、析构函数执行过程的目的。
 将Whole类的构造函数(见注释//问题2)改为下面形式,请解释出现的警告信息。

Whole::Whole(int p, int i,int j,int k):  Part(p),two(i),one(j),data(k)  //问题2

(4)阅读程序,写出执行结果,并回答问题

#include<iostream>  using namespace std; class A  {  public:     int n;  };  class B:public A {};   // class B:virtual public A{};  class C:public A {};   // class C:virtual public A{};  class D:public B,public C  {  public:    int getn() {return B::n;}  };  int main()  {     D d;     d.B::n=10;     d.C::n=20;   cout<<d.getn()<<endl;    return 0;}  

程序执行后,运行结果是多少?
将程序中有注释的两条语句修改为注释的内容,程序的运行结果又是多少?

0 0
原创粉丝点击