指出下面程序错误,并修改运行。 class A{ public: void setA(int); void showA(); private: int a; }; class B{ public: void setB(int); void showB(); private: int b; }; class C : public A, private B{ public: void setC(int, int, int); void showC(); private: int c; }; void A::setA(int x) { a=x; } void B::setB(int x) { b=x; } void C::setC(int x, int y, int z) { //派生类成员直接访问基类的 //公有成员 setA(x); setB(y); c=z; } void A::showA() { cout<<a<<endl; } void B::showB() { cout<<b<<endl; } void C::showC() { A::showA();B::showB();cout<<c<<endl;} int main() { C obj; obj.setA(5); obj.showA(); obj.setC(6,7,9); obj.showC(); obj.setB(6); obj.showB(); return 0; }
时间: 2024-01-16 19:02:29 浏览: 151
程序的问题在于在main函数中直接调用了C类的私有继承自B类的成员函数setB()和showB(),应该改为在C类中增加公有成员函数来访问B类的私有成员函数。以下是修改后的程序:
```
#include <iostream>
using namespace std;
class A{
public:
void setA(int);
void showA();
private:
int a;
};
class B{
public:
void setB(int);
void showB();
private:
int b;
};
class C : public A, private B{
public:
void setC(int, int, int);
void showC();
void setB_public(int x) { setB(x); }
void showB_public() { showB(); }
private:
int c;
};
void A::setA(int x) { a = x; }
void B::setB(int x) { b = x; }
void C::setC(int x, int y, int z) {
setA(x);
setB(y);
c = z;
}
void A::showA() { cout << a << endl; }
void B::showB() { cout << b << endl; }
void C::showC() { A::showA(); B::showB(); cout << c << endl; }
int main() {
C obj;
obj.setA(5);
obj.showA();
obj.setC(6, 7, 9);
obj.showC();
obj.setB_public(6);
obj.showB_public();
return 0;
}
```
在C类中增加了公有成员函数setB_public()和showB_public()来访问B类的私有成员函数,然后在main函数中通过这两个函数来调用B类的成员函数。
阅读全文