小众知识

首页 > 正文

问个简单的问题!!

在《Essential c++》里面说任何类如果声明又一个纯虚拟函数,那么由于起接口不完整,程序无法为它产生对象。
而在《The c++ programming language》的导论里面的有:
class stack{
public:
      class underflow{};
      class overflow{};
      virtual void push(char c)=0;
      virtual char pop()=0'
}

void f(stack &s_ref)
{
...
}
stack的声明中有纯虚拟函数啊,怎么还能定义stack &s_ref
是表示指向他的派生类的对象的吗?如果是的可以这样定义吗?
初学,多多指教!!  

 fierygnu 发表于:2003-11-13 22:34:42
得分:10 

引用不是实例。调用f时的参数是stack的子类。 

 fierygnu 发表于:2003-11-13 22:35:51
得分:0 

上下文中讲得很详细,多看几遍就清楚了。 

 wilson2004 发表于:2003-11-13 22:51:15
得分:0 

哦,后面传入的都是其派生类的对象
它这时候是不是相当
void f(Array_stack &s_ref)
void f(... &s_ref)


 plainsong 发表于:2003-11-13 22:56:43
得分:90 

引用和指针是C++内置类型的reference语义的两种类型。
一个抽象类不允许实例化,但可以声明这种类型的引用类型(引用和指针),它们可以用来引用可实例化的衍生类实例。
在很多情况下引用和指针的概念都是一样的,只是:
1:访问对象的语法不同
2:引用创建之后不能改为引用另一对象。
如果你能理解声明一个抽象类的指针,也就应该能理解声明一个抽象类的引用。 

 plainsong 发表于:2003-11-13 22:59:48
得分:0 

void f(Array_stack &s_ref)
void f(... &s_ref)
就成了函数重载了。
事实上这段代码相当于:
void f(stack* s_ptr)
{
  stack& s_ref = *s_ptr;//或者不写这句,把后面的s_ref都改成(*s_ptr)。
  ...

 wilson2004 发表于:2003-11-13 23:09:12
得分:0 

终于明白了:
一个抽象类不允许实例化,但可以声明这种类型的引用类型(引用和指针),它们可以用来引用可实例化的衍生类实例。
多谢这一句提醒哦。
谢谢!! 

上一篇:弱人求助:请问C++编译过程中出现如下错误提示:link error:undifined symbol:_main in turbo_c:COS.ASM是什么问题啊
下一篇:各位大侠帮帮忙!!C/C++中要把一个十六进制字符串,转换成十进制数怎么办?

分享到: