带有虚函数的类能被实例化吗?

我在前面声明了一个带有虚函数的类;;后来我用这个类定义了个对象,在用对象定义了个指针;例如class salesman{}class staffmanage{}staffmanage staff;staff *pstaff;pstaff=new salesman;编译会出错:Error 1 error C2259: 'salesman' : cannot instantiate abstract class c:\documents and settings\administrator\桌面\新建文件夹 (2)\project\main.cpp 215 project

指针的类型是可以强行转来转去的。普通情况你转什么类型就调对应类型的同名函数。但是虚函数实现多态后,尽管可能你把指针转成父类的类型,但是因为创建的时候是子类的类型,它还是会调用子类的这个虚函数。
这样可以统一代码且正确运用子类的新特性。
也因为如此,如果父类虚函数不做实现而=0成为纯虚函数,那么父类就不可以实例化,这个没有实现的虚函数也永远不会调用。因为根据多态的动态联编,总是会调用实例化了的子类的该方法。指针强行转成父类也不会调用纯虚函数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-01
可以。。抽象类不能实例化对象,抽象类就是类里面有纯虚函数的类。。
第2个回答  2011-10-31
可以
但是接口类,就是全部虚函数的类不能被实例化
第3个回答  2011-11-02
可以,但没看懂你的程序,你写的pstaff是指向什么类型的指针?

带有虚函数的类能被实例化吗?
也因为如此,如果父类虚函数不做实现而=0成为纯虚函数,那么父类就不可以实例化,这个没有实现的虚函数也永远不会调用。因为根据多态的动态联编,总是会调用实例化了的子类的该方法。指针强行转成父类也不会调用纯虚函数。

C++中 什么是虚方法
1 定义了纯虚函数的类是抽象类,不能被实例化。而定义了虚函数的类可以。2 定义了虚函数的基类指针调用虚函数时,如果指向派生类并且派生类覆盖定义了虚函数,那么会调用派生类的这个函数。否则调用基类的这个函数。3 如果派生类覆盖定义了基类的函数(没有virtual),那么基类指针指向派生类的时候调用的...

C#虚函数和接口的区别
3,抽象类不能被实例化 4,抽象方法不提供自身的实现,并且强制子类重写 虚函数:1,允许被重写,但不强制要求。声明时提供其自身实现 接口(interface)1,接口就是协议,其声明的成员(属性,方法,事件和索引器)必须由其继承的类实现。接口不能直接被实例化。虚方法与抽象方法的区别在于,虚方法提供...

什么是抽象类?
抽象类就是含有虚函数的类,它本身没有什么功能,只是为了以后派生子类

虚类的纯虚类
含有纯虚函数的类是纯虚类,更多的是叫抽象类。纯虚类可以有成员变量。纯虚类不能实例化。

抽象类为什么不能实例化?
抽象类为什么不能实例化对象:因为抽象类中包含有没有定义的函数,因此不能用抽象类来实例化对象。但可以声明抽象类的指针指向派生类。示例:class A{public: virtual void f()=0;}; \/\/声明一个抽象类 class B:public A{public: void f(){cout<<"B"<<endl;};void main(){A ma; \/\/错误...

C++中虚函数和纯虚函数的区别
4. 带有纯虚函数的类被称为抽象类,这种类不能直接生成对象,只有被继承,并重写其虚函数后,才能使用。代码示例:代码输出:总结:虚函数和纯虚函数都是为了多态这一特性而服务的。不同之处在于纯虚函数将父类提升为抽象类,无法实例化对象,只有接口声明,而其子类需要去实现父类中的声明,这样就...

纯虚函数的定义
抽象类的独特性在于,除非派生类完全实现了基类中的所有纯虚函数,否则它也将成为抽象类,无法实例化对象。通常,纯虚函数的函数体是空缺的,即默认无实现。然而,人们有时会忽略这个细节,误以为纯虚函数始终是无实现的。调用纯虚函数的方式是通过基类的虚函数调用关键字,即baseclass::virtual function...

c++中的纯虚函数与虚函数在应用上有什么差别??
纯虚函数就是为了阻止这个类的实例化。使其成为抽象类。当然虚函数不提供实现看起来也能阻止类的实例化,但它和纯虚函数比起来还有以下不足:1、一方面,从语法上说是不清晰的,你的类的使用者在在看到你的类的定义的时候无法确定哪些函数是没有提供实现的虚函数,而如果你写成纯虚函数就非常明确,一...

c++ 想利用多态的特性,在类中包含一个接口类型的属性,但是提示不允许使 ...
在c++里,一个类一旦有纯虚函数,那么它就成为一个抽象类,不能被实例化。c++里基类的指针可以指向子类对象,多态是就是用基类指针和虚函数配合实现的,你可以实现不同的子类,然后用基类的指针调用子类的接口 举个例子:include <iostream> using namespace std;class Observer { public:virtual void ...

相似回答