基类中一个函数定义成为虚函数,继承类中把基类中的虚函数重新抄写了一遍,请问这是两个类生成的虚函数表中的函数指针是相同的吗?
解决方案 »
- 读取SATA硬盘序列号的方法
- VC 枚举系统任务栏上的窗口
- 在哪找用C++创建的文件?急!!
- 一个VC中的小问题但是很麻烦
- -=-=-=-=rational purify问题,大哥大姐来帮我看看=-=-=-=-=-
- 非常奇怪的问题啊,要绝望了!
- win32 api 在未来的windows os中是否逐渐地不可用了?MFC将会怎样?高手们进来谈谈看法吧
- 高难度:列表视图的重绘问题
- VC CListCtrl控件中不通过鼠标选中某行,然后上下键移动选中行
- 去除MFC里的边框
- 为什么使用mcscpy拷贝后,值发生了变化呢?
- CListbox的这种功能如何实现,这么好用的功能竟然MFC里面没有实现,这是不是MFC的缺点啊!有人能够帮忙解决吗!
2:应该是不一样的,这个时候可能什么都不做
3:这个时候没有办法体现它是虚函数的特性,都指向同一个地方。
我认为是这样,大家讨论,高手指点,呵呵
{
Private:
int x;
Public:
virtual print(){cout<<'A'<<endl}
}
Class B:Public A
{
Private:
int y;
Public:
virtual print(){cout<<'B'<<endl}
}
void mian()
{
A* a;
//TODO:让a指向不同,验证结果
}
static int i=0;
cout<<i<<endl;
i++;
如果两次是调用一个地址上的函数的话,第2次输出就是1否则就是0
你那样做实际上已经改写了函数,你认为呢?^_^To:wf520pb()
你的方法真不错,谢谢~
呵呵,你的方法还是有点问题啊,因为那样的话,两次输出的都是0。
class A
{
public:
void print()
{
static int i=0;
cout<<i<<endl;
i++;
}
};
A a1,a2;
void main()
{
a1.print();
a2.print();
}
看看结果吧:0 1
说明是一个地址上的调用,即两个对象的函数地址是相同的(共享这个函数)
class A
{
public:
void print() //virtual加与不加都试试
{
static int i=0;
cout<<i<<endl;
i++;
}
};class B
{
public:
void print()
{
static int i=0;
cout<<i<<endl;
i++;
}
};
A a;
B b;
void main()
{
a.print();
b.print();
}
结果 0 0
说明函数地址不同。