有以下程序,编译时有语法错误,请修改程序,使其能够正确运行,且运行的结果为: 1 1 1 要求:不能修改ma

有以下程序,编译时有语法错误,请修改程序,使其能够正确运行,且运行的结果为:
1 1
1
要求:不能修改main函数中的代码。

#include <iostream>
using namespace std;
class A
{
int i,j;
A(int a,int b){i=1;j=1;}
public :
void print(){cout<<i<<" "<<j<<endl;}
};
class B:public A
{
int x;
B(){x=0;}
B(int a){x=a;}
public :
void print(){A::print();cout<<x<<endl;}
};
int main()
{
B b(1);
b.print();
return 0;
}

/*
主要是因为A声明了构造函数,编译器就不会再自动生成默认的构造函数
而你的B没有显式调用A的构造函数,编译器会默认使用A的默认构造函数
A没有,B要用,这就出错了
解决办法有:
①给A加默认构造函数
②给A的构造函数加默认值
③B显式调用A的构造函数
*/
#include <iostream>
using namespace std;
class A{
    int i,j;
    A():i(0),j(0){}
    A(int i,int j):i(i),j(j){}
public :
    void print(){cout<<i<<" "<<j<<endl;}
};
class B:public A{
    int x;
    B():x(0){}
    B(int x):x(x){} 
public : 
    void print(){A::print();cout<<x<<endl;}
};

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-22
1、给A添加一个默认的构造函数
A(){};
2、A和B的构造函数声明为public,否则实例化时没有权限

修改后如下:
#include <iostream>
using namespace std;
class A
{
int i,j;
public://++
A(){}; //++
A(int a,int b){i=1;j=1;}
public:
virtual void print(){cout<<i<<" "<<j<<endl;}
};
class B:public A
{
int x;
public: //++
B(){x=0;}
B(int a){x=a;}
public :
void print(){A::print();cout<<x<<endl;}
};
int main()
{
B b(1);
b.print();
return 0;
}
第2个回答  推荐于2017-11-23
访问控制权限问题~代码改好了~~自己好好看看 学学基础吧~基础要好~~
#include <iostream>
using namespace std;
class A
{
int i,j;
public :
A(){}
A(int a,int b){i=1;j=1;}

void print(){cout<<i<<" "<<j<<endl;}
};
class B:public A
{
int x;
public :
B(){x=0;}
B(int a){x=a;}

void print(){A::print();cout<<x<<endl;}
};
int main()
{
B b(1);
b.print();
return 0;
}本回答被提问者采纳
第3个回答  2011-04-22
程序呢?追问

发过去了,不好意思!

相似回答