第十一周 阅读程序(一)

来源:互联网 发布:网络电视怎么搜索电影 编辑:程序博客网 时间:2024/04/29 16:16
/*  * Copyright (c) 2014, 烟台大学计算机学院  * All rights reserved.  * 文件名称:test.cpp  * 作    者:呼亚萍  * 完成日期:2015年5月20日  * 版 本 号:v1.0  *  * 问题描述: 先阅读程序,写出你预想的运行结果,再记录运行结果,如果两者有差异,再读程序给出解释。  * 程序输入:相应的程序 * 程序输出:对应得结果 */ #include <iostream>using namespace std;class Data{public:    Data(int i):x(i)    {        cout<<"A";    }    ~Data()    {        cout<<"B";    }private:    int x;};class Base{public:    Base(int i):b1(i)    {        cout<<"C";    }    ~Base() {cout<<"D";}private:    int b1;};class Derived:public Base{public:    Derived(int i,int j):Base(i),d1(j)    {        cout<<"E";    }    ~Derived()    {        cout<<"F";    }private:    Data d1;};int main(){    Derived obj(1,2);    return 0;}


运算结果:

#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;}


运算结果:

#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   //将class B:public A 中的public改为protected,A类中的公有成员与保护成员将无法在类外访问;删除public,A类为私有继承,无法在类外访问A类中ShowA()函数{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;}


运算结果:

#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),解释出现的警告信息:因为在执行构造函数时先按照顺序执行上一级的构造函数,即使位置写反,计算机也会按正常的顺序进行编译,在程序的最后执行析构函数。

学习心得:

通过阅读程序加深了对知识点的了解。

 

0 0
原创粉丝点击