#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(); }输出步骤
时间: 2024-03-04 17:50:18 浏览: 60
这段代码的输出步骤如下:
1. 创建一个类B的对象b。
2. 调用b的set方法,传入1和3。
3. 调用b的print方法,先调用A的print方法输出a的值为1,再输出B的print方法中的m和n的值,分别为3和0。
4. 调用b的set方法,传入5、6和7。
5. 调用b的print方法,先调用A的print方法输出a的值为5,再输出B的print方法中的m和n的值,分别为6和7。
6. 暂时注释掉b.set(10)这行代码,因为基类的set方法被派生类重载而被隐藏了。
7. 调用b的A::set方法,传入10,此时a的值变为10。
8. 调用b的A::print方法,输出a的值为10。
9. 调用b的setX方法,传入8,此时a的值变为8。
10. 再次调用b的print方法,先调用A的print方法输出a的值为8,再输出B的print方法中的m和n的值,分别为6和7。
相关问题
改进代码:#include<iostream> using namespace std; class base { private: int x; public: void setx(int n) { x = n; } void showx() { cout<<x<<endl; } }; class derived:private base { private: int y; public: void setxy(int n, int m) { setx(n); y = m; } void showxy() { cout<<x<<endl; cout<<y<<endl; } } int main() { derived obj; obj.setx(10); obj.showx(); obj.setxy(20, 30); obj.showxy(); return 0; }
以下是改进后的代码:
```
#include<iostream>
using namespace std;
class base {
private:
int x;
public:
void setx(int n)
{
x = n;
}
void showx()
{
cout<<x<<endl;
}
};
class derived:private base {
private:
int y;
public:
void setxy(int n, int m)
{
setx(n);
y = m;
}
void showxy()
{
showx();
cout<<y<<endl;
}
};
int main() {
derived obj;
obj.setx(10);
obj.showx();
obj.setxy(20, 30);
obj.showxy();
return 0;
}
```
改进的内容如下:
1.在 derived 类的 showxy 函数中,使用 showx 函数来输出 x 的值,而不是直接访问 x。因为在 derived 类中,x 是私有的,不能直接访问。
2.将 showx 函数的调用从 main 函数中移动到 showxy 函数中,以避免代码重复。
3.修复了代码中的分号错误。
代码改错:#include<iostream> using namespace std; class base { private: int x; public: void setx(int n) { x = n; } void showx() { cout<<x<<endl; } }; class derived:private base { private: int y; public: void setxy(int n, int m) { setx(n); y = m; } void showxy() { cout<<x<<endl; cout<<y<<endl; } } int main() { derived obj; obj.setx(10); obj.showx(); obj.setxy(20, 30); obj.showxy(); return 0; }
代码有一个语法错误,需要在 derived 类的最后加上一个分号。
正确代码如下:
```
#include<iostream>
using namespace std;
class base {
private:
int x;
public:
void setx(int n)
{
x = n;
}
void showx()
{
cout<<x<<endl;
}
};
class derived:private base {
private:
int y;
public:
void setxy(int n, int m)
{
setx(n);
y = m;
}
void showxy()
{
cout<<x<<endl;
cout<<y<<endl;
}
}; // 添加分号
int main() {
derived obj;
obj.setx(10);
obj.showx();
obj.setxy(20, 30);
obj.showxy();
return 0;
}
```
阅读全文