注册 登录
编程论坛 C++教室

接口继承是纯虚函数为基类,实现继承是非纯虚函数为基类?

newyj 发布于 2008-04-28 21:40, 2941 次点击
接口继承是纯虚函数为基类,实现继承是非纯虚函数为基类?
不知道 这样理解对不对
缺省实现继承 和 强制性实现继承 各是什么意思?
12 回复
#2
sunkaidong2008-04-28 21:50
前面的是对的..后面不知道..都属于高级主题了...你做研究?
#3
newyj2008-04-28 22:10
初学 只是不懂是什么意思
更谈不上研究了
#4
sunkaidong2008-04-28 22:21
我是看c++primer过来的...是本中等偏上的书...你的问题...也见过一点..有部分没听过..也许不是这样叫吧...你最好放点代码我们一起提高...
#5
newyj2008-04-28 22:35
缺省实现继承 和 强制性实现继承
就是 不知道什么意思 更不知道怎么用代码实现了
#6
aipb20072008-04-28 23:01
[bo]以下是引用 [un]newyj[/un] 在 2008-4-28 21:40 的发言:[/bo]

接口继承是纯虚函数为基类,实现继承是非纯虚函数为基类?
不知道 这样理解对不对
缺省实现继承 和 强制性实现继承 各是什么意思?


c++里没有interface这个概念。
有纯虚函数的基类是抽象类,按你的分类标准,c++里继承分为继承于一个抽象类和继承于一个非抽象类(具体类)。

缺省实现继承:基类中的非纯虚函数,也就是一般的虚函数。
virtual void fun(){
    //your implementation
}
这样的函数是必须实现的,派生类可以去重写(override)这个函数,但是调用时如果子类没又重写它,也不会出错,因为基类有默认的实现。

强制性实现继承:基类中的纯虚函数。
virtual void fun() = 0;
这样的一个函数是没有实现的,所以你要想调用它,那么必须在子类中重写(override)它,否则就会调用出错。所以这里的实现是强制性的。
#7
sunkaidong2008-04-28 23:06
原来是这个意思...呵呵..学习了..内容知道.只是这些名词没怎么听过...virtual void fun() = 0;这个在基类中也是可以有实现的....

[[it] 本帖最后由 sunkaidong 于 2008-4-28 23:19 编辑 [/it]]
#8
newyj2008-04-29 10:22
谢谢了
那要是virtual void fun() = 0{...};这样的话可不可以不在派生类中再定义自己的函数?
直接调用基类的 fun()函数呢
#9
sunkaidong2008-04-29 10:58
可以..但是你就没办法多态了
#10
newyj2008-04-29 11:01
回复 9# 的帖子
是不是就可以把它当作 一个普通的成员函数
在派生类中就不能再重新定义它了
#11
sunkaidong2008-04-29 11:18
可以从新定义..把函数声明为纯虚函数..是为了说明基类是抽象类..抽象类是没办法声明实例对象的...只能是引用和指针...
#12
newyj2008-04-29 11:35
谢谢耐心回答
那重新定义的话 是不是就会把基类中的函数给屏蔽了
不能再用动态绑定了
#13
sunkaidong2008-04-29 12:14
如果你不加visual是会屏蔽..即使加了也只是在是基态对象的引用和指针是多态...如果你用派生类对象访问,即使是visual也是会屏蔽的...看看多态的概念和条件
1