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
- 2015级C++第10、11周程序阅读(补充) 继承和派生
- 第10、11周程序阅读(补充) 继承和派生
- 第10、11周程序阅读 继承和派生 1
- 2015级C++第10、11周程序阅读 继承和派生
- 第11周 阅读程序-继承和派生2
- 第11周 程序阅读-继承和派生3
- 第11周 程序阅读-继承和派生4
- 2015级C++第10、11周补充实践项目 继承和派生
- 第11周-阅读继承和派生
- 第11周 程序阅读——继承和派生(1)
- 第11周 程序阅读——继承和派生(2)
- 第11周 程序阅读——继承和派生(3)
- 第11周 程序阅读——继承和派生(4)
- 项目0-是春哥啊(第10,11周补充项目,继承和派生)
- 第11周 程序阅读——继承和派生 自选阅读(1)
- 第11周 程序阅读——继承和派生 自选阅读(2)
- 第11周 程序阅读——继承和派生 自选阅读(3)
- 第10.11周项目 继承和派生(补充)2
- linux redis安装
- ViewPager无限自动轮播+动画
- MySQL不存在则创建数据库数据表
- 蓝牙聊天工具
- iOS开发工具集合
- 2015级C++第10、11周程序阅读(补充) 继承和派生
- centos7之lnmp安装
- To The Max
- html5手机网站需要加的那些meta/link标签,html5 meta全解
- git Pull Request 是什么意思?
- 04-树4 是否同一棵二叉搜索树
- OpenGL与OpenCV实现增强现实
- linux常用命令详解
- 数据结构中哈夫曼树水题代码