首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于继承的有关问题 百思不得其解

2012-10-25 
关于继承的问题百思不得其解#includeiostreamusingnamespacestdclass A{int xpublic:A(int a):x(a){co

关于继承的问题 百思不得其解
#include<iostream>
using namespace std;
class A
{
  int x;
public:
A(int a):x(a)
{
cout<<"Consturcting A\n";
}

};
class B :public A
{
public:
B()
{
cout<<"Consturting B\n";
}
};
int main()
{
  B b;
  return 0;
}

error C2512: 'A' : no appropriate default constructor available问错在哪里

[解决办法]
问题很明显:B b时调用B的构造函数,但是派生类的构造函数会调用基类的构造函数A(int a):x(a);基类的构造函数需要一个参数,所以会出错: 'A' : no appropriate default constructor available:没有合适的默认构造函数。
[解决办法]
修改方法1:给基类的构造函数加上默认参数:
#include<iostream>
using namespace std;
class A
{
int x;
public:
A(int a = 0):x(a)//默认值为0
{
cout<<"Consturcting A\n";
}

};
class B :public A
{
public:
B()
{
cout<<"Consturting B\n";
}
};
int main()
{
B b;
return 0;
}

修改方法2:显示调用基类构造函数时加上参数:
class A
{
int x;
public:
A(int a ):x(a)
{
cout<<"Consturcting A\n";
}

};
class B :public A
{
public:
B(int i):A(i)
{
cout<<"Consturting B\n";
}
};
int main()
{
B b(0);
return 0;
}

把分全给我吧!哈哈
[解决办法]

C/C++ code
#include<iostream>using namespace std;class A{  int x;public:    A()  //这儿    {        cout<<"A default constructor"<<endl;    }   A(int a):x(a)   {     cout<<"Consturcting A\n";   } };class B :public A{public:   B()   {   cout<<"Consturting B\n";   } };int main(){  B b;  return 0;}
[解决办法]
问题很清楚啊:
error C2512: 'A' : no appropriate default constructor available问错在哪里

意思就是:A中没有合适的构造函数,

B继承A,那么构造函数B(),要先调用A的构造函数A(),你在A中加上无参构造函数A(),就可以了
[解决办法]
显然是参数不够,基类也是需要参数的,楼主!
[解决办法]
B的构造函数少了一个参数

B继承自A 也就是说A的成员B都有
A中有一个成员变量X B中也有一个X
在B构造时候函数需要一个int 类型的参数 并显示的调用父类A的构造函数
B(int i):A(i)

热点排行