抽象类 和 引用 的问题 

justfor127 2008-12-19 07:39:35
抽象类 不能实例化

最近看书 突然发现实现动态联编 可以用引用

然后就出了以下的问题  :


#include <iostream>
using namespace std;

class Base {
public:
virtual void f() = 0 ;
};

class Test :public Base {
public:
void f();
};

void Test:: f() {
cout<<"TEST!!!!\n";
}

int main() {
Test t;
Base &b = t;  //??
b.f();

Base *pre;
pre = &t;
pre->f();
}



Base &b = t;
算是对抽象类的实例化么??
如果算 这个怎么解释啊 ?? 理解成指针么??

不算? 又怎么说啊?
...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyisnail 2008-12-19
  • 打赏
  • 举报
回复
引用和指针正是C++中多态的基础
Base &b = t;
这里没有创建Base类型的对象,只是用Base类型的引用指向Test类型的对象t,如果Base还有其他的派生类,用这个引用b就能实现多态
VCRWX 2008-12-19
  • 打赏
  • 举报
回复
再次更正java中可以用接口做为一个类的名称,但绝对不是用接口去实例化一个对象
VCRWX 2008-12-19
  • 打赏
  • 举报
回复
改正java中可以用结构做为一个类的名称,但绝对不是用接口去实例化一个对象
VCRWX 2008-12-19
  • 打赏
  • 举报
回复
引用和指针在实现机制上有很大的共同点,Base &b=t,并没有创建新的对象,只是创建一个别名而已,也就是说没有调用任何构造函数,当然可以这样用,无非是面向对象中多态的一种表现,其实如果楼主对java了解,对这个问题理解的将会更深刻
java中可以用结构做为一个类的名称,但绝对不是用接口去实例化一个对象
jl443960770 2008-12-19
  • 打赏
  • 举报
回复
up[Quote=引用 1 楼 nineforever 的回复:]
你实例化的是Test类,而不是抽象类Base。
Base &b=t并没有创建新的对象
b.f()等价于static_cast <Base&>(t).f()
[/Quote]
lpqss1 2008-12-19
  • 打赏
  • 举报
回复
up
Qlaiaqu 2008-12-19
  • 打赏
  • 举报
回复
顶一楼,引用与指针有相同的地方,也有不同的地方,指针是c的高效传递数据的方式,而引用是c++高效传递数据的方式,这两者要区别
nineforever 2008-12-19
  • 打赏
  • 举报
回复
你实例化的是Test类,而不是抽象类Base。
Base &b=t并没有创建新的对象
b.f()等价于static_cast<Base&>(t).f()

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧