#include <iostream> using namespace std; class A { int a; public: void setX(int i){a=i; } void set(int i){a=i; } void print(){ cout<<"A::print(), a="<<a<<endl; } }; class B: public A { int m, n; public: void set(int p, int k){m=p; n=k;} void set(int i, int j, int k){ A::set(i); m=j; n=k; } void print(){ A::print(); cout<<"B::print(), m="<<m<<", n="<<n<<endl; } }; void main(){ B b; b.set(1,3); b.print(); b.set(5,6,7); b.print(); //b.set(10);//基类的set()方法 被重载(没有被重定义),被派生类隐藏了 b.A::set(10);// b.A::print(); b.setX(8); b.print(); }解释程序执行结果
时间: 2023-06-25 22:04:14 浏览: 121
使用include <iostream>时一定要加using namespace std
程序执行结果为:
A::print(), a=1
B::print(), m=3, n=0
A::print(), a=5
B::print(), m=6, n=7
A::print(), a=1
B::print(), m=3, n=0
首先创建了一个B类的对象b。然后调用b的set(1,3)方法,该方法调用了B类的set(int p, int k)方法,将m设为1,n设为3。接着调用b的print()方法,该方法调用了B类的print()方法,先调用A类的print()方法输出a的值为1,再输出m的值为3,n的值为0(由于没有给n赋值,因此默认值为0)。
接着调用b的set(5,6,7)方法,该方法调用了B类的set(int i, int j, int k)方法,先调用A类的set(i)方法将a设为5,再将m设为6,n设为7。接着再次调用b的print()方法,输出a的值为5,m的值为6,n的值为7。
然后尝试调用b的set(10)方法,但是该方法被B类重载了,因此编译器无法识别该方法。接着调用b.A::set(10)方法,该方法调用了A类的set(int i)方法,将a设为10。接着调用b.A::print()方法输出a的值为1,因为在之前的操作中已经将a的值重新赋为了1。
最后调用b的setX(8)方法,该方法调用A类的setX(int i)方法将a设为8。再次调用b的print()方法,输出a的值为8,m的值为3,n的值为0。
阅读全文