读书人

这个构造函数//如何错了

发布时间: 2013-10-01 12:15:56 作者: rapoo

这个构造函数//怎么错了?



#include <iostream>
using namespace std;

class Base{
public:
Base(){}
Base(Base* p):Root(p){}
virtual void* CreateRoot(void* data)=0;
virtual void* CreateLeft(void* data)=0;
virtual void* CreateRight(void* data)=0;
Base* Root;
};

class Example:public Base{
public:
Example(){}
Example(void* ObjTempT=NULL):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}
Example* Left;
Example* Right;
void* ObjTemp;
};


int main(){

Base* execute = new Example;
Example obj;
return 0;
}

[解决办法]
“Example”: 指定了多个默认构造函数
“Example”: 不能实例化抽象类
“Example::Example”: 对重载函数的调用不明确


你得 CreateRoot 把这些纯虚函数实现了
Example(void* ObjTempT=NULL) --> Example(void* ObjTempT)
[解决办法]
1、纯虚函数继承后是需要实现的;
2、Example(void* ObjTempT=NULL)可以缺省参数,与Example()是冲突的。


#include <iostream>
using namespace std;

class Base{
public:
Base(){}
Base(Base* p):Root(p){}
//virtual void* CreateRoot(void* data)=0;
//virtual void* CreateLeft(void* data)=0;
//virtual void* CreateRight(void* data)=0;
Base* Root;
};

class Example:public Base{
public:
Example(){}
Example(void* ObjTempT):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}
Example* Left;
Example* Right;
void* ObjTemp;
};


int main(){

Base* execute = new Example;
Example obj;
return 0;
}


引用:


#include <iostream>
using namespace std;

class Base{
public:
Base(){}
Base(Base* p):Root(p){}
virtual void* CreateRoot(void* data)=0;
virtual void* CreateLeft(void* data)=0;
virtual void* CreateRight(void* data)=0;
Base* Root;
};

class Example:public Base{
public:
Example(){}
Example(void* ObjTempT=NULL):Left(NULL),Right(NULL),ObjTemp(ObjTempT),Base(NULL){}
Example* Left;
Example* Right;
void* ObjTemp;
};


int main(){

Base* execute = new Example;
Example obj;
return 0;
}

读书人网 >C++

热点推荐