C++程序改错

来源:百度知道 编辑:UC知道 时间:2024/05/11 18:29:24
#include<iostream.h>
class A
{ int i;
public:
void display( ) { cout<<”class A\n”; }
};
class B
{ int j;
public:
void display( ) { cout<<”class B\n”; }
};
class C: public A, public B
{
public:
void sum( )
{ cout<<i+j<<endl; }
};
void main()
{
C demo;
demo.sum();
}

小弟对这个改错有不明,望高手解答

1.void display()解析的时候引起二义.所以应该给他加上虚函数声明,然后在C的派生类中重载虚函数display();在这个函数中可以调用A的display和B的display.
2.C类中的sum()函数调用了A中的i和B中的j,但是i和j都是类私有成员所以即使是他们的派生类也无法访问,所以应该把i和j定义成友员成员,这样只有派生类才可以访问而其它不能访问达到保护的目的.改后的程序如下
#include<iostream.h>
class A
{
protected:
int i;
public:
virtual void display( ){ cout<<\"class A\\n\"; }
};
class B
{
protected:
int j;
public:
virtual void display( ){ cout<<\"class B\\n\"; }
};
class C: public A, public B
{
public:
virtual void display( ){A::display();B::display();}
void sum( )
{ cout<<i+j<<endl; }
};
void main()
{
C demo;
demo.sum();
demo.display();

}

i, j是私有的,C类里不能调用它们,应该把i, j 改为protected的。如下:
class A
{
protected:
int i;
public:
void display( ) { cout<<”class A\n”; }
};