请解释此题的输出结果。

suwy2007 2008-10-16 10:31:01
class A{
public:
A() {func(0);};
virtual void func(int data) {printf("A1 :%d\n",data);}
virtual void func(int data) const {printf("A2 :%d\n",data);}
void func(char *str) {printf("A3 :(%s)\n",str);}
};
class B:public A{
public:
void func() {printf("B1 :%s\n","");}
void func(int data) {printf("B2 :%d\n",data);}
void func(char *str) {printf("B3 :(%s)\n",str);}
};
int main()
{
A *pA;
B b;
const A *pcA;
pA=&b;
pA->func(1);
pA->func("test");
A().func(1); //这种方式是什么意思
pcA=&b;
pcA->func(2);
return 0;
}
程序运行的结果:
A1 :0
B2 :1
A3 :(test)
A1 :0
A1 :1
A2 :2
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jintianfree 2008-10-17
  • 打赏
  • 举报
回复

class A
{
public:
A()
{func(0);};
virtual void func(int data)
{printf("A1 :%d\n",data);}
virtual void func(int data) const
{printf("A2 :%d\n",data);}
void func(char *str)
{printf("A3 :(%s)\n",str);}
};
class B:public A
{
public:
void func()
{printf("B1 :%s\n","");}
void func(int data)
{printf("B2 :%d\n",data);}
void func(char *str)
{printf("B3 :(%s)\n",str);}
};
int main()
{
A *pA;
B b;
const A *pcA;
pA=&b;

pA->func(1);
pA->func("test");
A().func(1); //这种方式是什么意思
pcA=&b;
pcA->func(2);
return 0;
}


程序运行的结果:
A1 :0 B b;调用基类构造函数 A()
B2 :1 pA->func(1);继承类重写了虚函数,调用B的void func(int data)
A3 :(test) pA->func("test"); 不是虚函数,直接嗲用基类A的void func(char *str)
A1 :0 A().func(1);先调用A构造函数生成一个对象,并输出本行,接着调用func(1)输出下一行
A1 :1 参考上一行
A2 :2 const对象只能调用const成员函数 virtual void A::func(int data) const
走好每一步 2008-10-17
  • 打赏
  • 举报
回复
const A 是说类成员不能被修改,继承类的函数虽然没修改,但它是可以修改的,类别不符合,所以用基类中的函数了
suwy2007 2008-10-16
  • 打赏
  • 举报
回复
自己调试是这个原因啊啊,谢谢了。
suwy2007 2008-10-16
  • 打赏
  • 举报
回复
最后一个结果,倒数第二个和第三个明白了。是不是因为const A ×pcA ,所以不能指向继承类的函数了啊?
suwy2007 2008-10-16
  • 打赏
  • 举报
回复
哦,那最后三个为什么调用基类的函数啊 ,难道是因为const的原因?
zhangxichao 2008-10-16
  • 打赏
  • 举报
回复
A().func(1); //这种方式是什么意思
A()是定义了一个自动变量,等价于
A a;
a.func(1);
  • 打赏
  • 举报
回复
A().func(1); 构造了一个临时对象,然后调用这个临时对象的成员函数func

65,211

社区成员

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

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