请教大家一个C++问题

an1984104 2007-10-10 10:52:52
class A
{
public:
void virtual print(){cout<<"A::print()"<<endl;}
};
class B :public A
{
public:
void virtual print(){cout<<"B::print()"<<endl;}
} ;
class C :public B
{
public:
static void print(){cout<<"C::print()"<<endl;}
} ;

A *ac;
C c;
ac=&c;
ac->print();
输出什么? 为什么?
...全文
107 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
star119119 2007-10-10
  • 打赏
  • 举报
回复
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.


C:\>g++ -o main a.cpp
a.cpp:18: `static void C::print()' cannot be declared
a.cpp:13: since `virtual void B::print()' declared in base class
a.cpp:25:2: warning: no newline at end of file

C:\>

这个无法编译。。。。。。。。。。

环境windows gnu
5311 2007-10-10
  • 打赏
  • 举报
回复
yanhailiangyhl

B::print()

C++的虚函数

------------------
此答案正确,静态函数属于类,和对像没有关系。
manrenmanren 2007-10-10
  • 打赏
  • 举报
回复
B::print()
因为ac为基类的指针,一般智能调用基类的函数
对于虚函数调用派生类的函数,但是C类的print不是虚函数 因此调用B类的print
如果C修改为class C :public B
{
public:
// static void print(){cout <<"C::print()" <<endl;}
virtual void print(){cout <<"C::print()"<<endl;}
} ;
则调用C类的虚函数print
huyiwatching 2007-10-10
  • 打赏
  • 举报
回复
yanhailiangyhl 正解,因为父类或本身有虚函数的类据有vtable,如yanhailiangyhl
所说因为static函数不进vtable, 所以A 类指针是不知道其之类C 有print这个函数的。
healer_kx 2007-10-10
  • 打赏
  • 举报
回复
C::print
多态。
yanhailiangyhl 2007-10-10
  • 打赏
  • 举报
回复
静态函数相当于全局,不进vtable
yanhailiangyhl 2007-10-10
  • 打赏
  • 举报
回复
B::print()

C++的虚函数
Cf251seu 2007-10-10
  • 打赏
  • 举报
回复
5楼说的很明白

64,637

社区成员

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

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