找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1564|回复: 3

虚函数的请教(我概念没理解透)

[复制链接]
发表于 2009-11-3 03:40:55 | 显示全部楼层 |阅读模式 IP:江苏扬州
程序如下:
#include<iostream.h>
#include<string.h>
class a
{
public:
a(){}
a(char *q)
{
p=new char[strlen(q)+1];
strcpy(p,q);
}
a(const a &other)
{
this->p=new char[strlen(other.p)+1];
strcpy(this->p,other.p);
}
~a()
{
delete p;
}
virtual void disp()
{
cout<<p<<endl;
}
private:
char *p;
};
class b:public a
{
public:
b(){}
b(char *m,char *n):a(m)
{
s=new char[strlen(n)+1];
strcpy(s,n);
}
b(const b &other)
{
s=new char[strlen(other.s)+1];
strcpy(s,other.s);
}
~b()
{
delete s;
}
void disp()
{
cout<<s<<endl;
}
private:
char *s;
};
int main()
{
a m("123");
b n("789","456");
a *p=&m;
p->disp();
p=&n;
p->disp();
return 0;
}
定义了m是123 再在n中初始化后 为什么没变成789啊
怎么才能变成789啊?
请大家把我问题的本质讲一讲吧 我对概念还不太理解
谢谢大家了
发表于 2009-11-3 03:40:56 | 显示全部楼层 IP:江苏扬州
我昏,123是1个地址中存进的值,它是在类a中的。
你在定义一个b类n,那么会再分配一个内存,那么你说m中的值为什么会改变呢?
至于虚拟函数:我有这种见解,不知对否?如下:
你可以把基类看成一个小匣子,那么派生类就是一个大匣子:
_________ 看左边的图形A是基类,B是派生类
| | person *ptr=new customer;表示person的指针指向一个customer的对
| A | 象,可以看成:person的this地址与返回的customer是一个地方,只
————| <--B 不过,customer对象要在后面额外的加上派生而来的多余的特征。本
| | 来如果不用虚拟函数,那么这个指针就会调用A中的成员函数,因为这
| | 个地址作为起点的A盒子中有这个函数。然而有了虚拟函数,那么这个
————— 虚拟函数就会在一个虚表中,并且有一个虚拟指针指向这个虚表的首地址,调用这些函数时是通过这个虚拟指针来调用这些虚拟函数。当派生类重写这个函数时,它会对他继承的虚表做修改,那么在调用这个函数时,就会因为判断虚拟指针指向虚表的内容而决定使用哪一个函数~!
回复

使用道具 举报

发表于 2009-11-3 03:40:57 | 显示全部楼层 IP:江苏扬州
定义了m是123 再在n中初始化后 为什么没变成789啊
怎么才能变成789啊?


b(char *m,char *n):a(n)
{
s=new char[strlen(m)+1];
strcpy(s,m);
}
回复

使用道具 举报

发表于 2009-11-3 03:40:58 | 显示全部楼层 IP:江苏扬州
你看清楚你写的是strcpy(s,n)不是strcpy(s,m)把n换成m就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:23 , Processed in 0.178933 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表