虚函数继承,程序出错,不知道怎么改。
#include <iostream>
using namespace std;
class Base
{
public:
Base(){}
Base(int c):count(c){}
virtual void print() const=0;
private:
int count;
}
class Derived:public Base
{
public:
Derived(){}
Derived(int c):Base(c){}
void print() const{cout<<"Derived"<<endl;}
};
void main( )
{
Derived d(10);
Base dd(1);
Base *pb;
pb=&d;
pb->print();
Base &cb=d;
Derived ddd=*pb;
}
[解决办法]
Base 中 virtual void print() const=0;是一个纯虚函数
那么Base是一个抽象基类,抽象基类是不能生成对象的。
还有类派生的话 最好把析构函数定义成virtual, 这样派生类被基类指针或引用指向时,掉用delete也能掉到派生类的析构函数。
[解决办法]
#include <iostream>
using namespace std;
class Base
{
public:
Base(){}
Base(int c):count(c){}
virtual void print() const=0;
private:
int count;
}//此处少“;”
class Derived:public Base
{
public:
Derived(){}
Derived(int c):Base(c){}
void print() const{cout<<"Derived"<<endl;}
};
void main( )
{
Derived d(10);
Base dd(1);//此处错误,虚基类不可实例化
Base *pb;
pb=&d;
pb->print();
Base &cb=d;
Derived ddd=*pb;//不支持基类像派生类的转化
}
[解决办法]
Base是纯虚函数,不能定义对象,只为派生类提供接口继承,还有如果基类有虚方法,析构要定义为virtual,不然派生类对象析构时其Base部分没法析构,不太明白你想干嘛,如果只是想试下动态绑定,就别把Base类的print()=0,virtual void print(){cout << "baSe" << endl;}
[解决办法]
class Base{public: Base(){} Base(int c):count(c){} //virtual void print() const=0;//你这里设定的是一个纯虚函数,那么Base是不能产生对象的! virtual void print()const{std::cout<<"Base"<<std::endl;}private: int count;};class Derived:public Base{public: Derived(){} Derived(int c):Base(c){count = c;} void print() const{std::cout<<"Derived"<<std::endl;}private: int count;};int _tmain(int argc, _TCHAR* argv[]){ Derived d(10); Base dd(1); Base *pb = &d; pb->print(); system("pause"); return 0;}
[解决办法]
大哥,你把提到的那几处代码改正了不就能运行了
1:加个分号;
2:此处虚基类不可实例化,去掉;
3:基类不可下转为派生类,去掉;