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

虚函数继承,程序出错,不知道如何改

2012-10-15 
虚函数继承,程序出错,不知道怎么改。#include iostreamusing namespace stdclass Base{public:Base(){}B

虚函数继承,程序出错,不知道怎么改。
#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;}
[解决办法]

C/C++ code
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:基类不可下转为派生类,去掉;


探讨

引用:

#include <iostream>
using namespace std;
class Base
{
public:
Base(){}
Base(int c):count(c){}
virtual void print() const=0;
private:
int count;
}//此处少“;”
class Derived……

热点排行