一个一直困扰着我的简单C++问题,大家请看:

ZengYongChun 2003-06-29 08:13:57
class A
{
public:
CString str;
A()
{
str="aaa";
}
};

class B:public A
{
public:
CString str; ////与A中的变量同名
B()
{
str="bbb";
}
};

void CTestdlgDlg::OnButton1()
{
// TODO: Add your control notification handler code here
A *m_a=new B();
::AfxMessageBox(m_a->str);
}

答案:"aaa".

问:我认为new B()的话,此刻创建了一个对象实例,然后A指针指向该对象,此刻应该返回B的str的值,为何还是A的呢?
...全文
31 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tar 2003-06-30
  • 打赏
  • 举报
回复
成员变量静态束定
成员function默认也是静态束定
only virtual is 动态束定
ZengYongChun 2003-06-30
  • 打赏
  • 举报
回复
在类B的对象中实际存在两个名为str的成员变量?这个不可能吧
webycn 2003-06-30
  • 打赏
  • 举报
回复
同意SoLike(是我),如果是虚函数则不同.
ZengYongChun 2003-06-30
  • 打赏
  • 举报
回复
to:cadinfo(无语清风)

是因为我看到C#中可以让属性也多态,这个我原来还没有试过在C++中是怎样的
lazycat818 2003-06-30
  • 打赏
  • 举报
回复
用基类的指针是不可能直接访问派生类的成员的,除非使用虚函数。
cadinfo 2003-06-29
  • 打赏
  • 举报
回复
关键是你这样子做的意义是什么,如果学习是为了钻牛角的话那么也就失去了学习的意义,有的人三天写一个软件,而有的人三天就钻了一个牛角,不然天下拿来那么多大家?
cadinfo 2003-06-29
  • 打赏
  • 举报
回复
关键是你这样子做的意义是什么,如果学习是为了钻牛角的话那么也就失去了学习的意义,我可以三天写一个软件,而你三天就钻了一个牛角,不然天下拿来那么多大家?
fengqinggao 2003-06-29
  • 打赏
  • 举报
回复
呵呵,这个问题有点意思,刚才尝试了一下,两个差别比较大的类是不用这样初始化的,即直接提醒不能用这个类初始化那个类,你这两个类基本上一样,系统估计就认为是一个类了,你在两个类的构造函数中设置断点,看看调用的是那个类的构造函数,也许能够判别一下
winmainII 2003-06-29
  • 打赏
  • 举报
回复
你不能看指针所指的类型,要看它的原始类型
syl08341 2003-06-29
  • 打赏
  • 举报
回复
up
jhyu 2003-06-29
  • 打赏
  • 举报
回复
up
Cline 2003-06-29
  • 打赏
  • 举报
回复
不要把成员变量与虚函数搞混了
skyxie 2003-06-29
  • 打赏
  • 举报
回复
A *m_a=new B();
指针m_a 按A类初始化,但是分配的空间大小为B类初始化需要的空间
如果A类初始化需要的空间比B类大,会出错。
ZengYongChun 2003-06-29
  • 打赏
  • 举报
回复
没有关系,但是我还是觉得这个变量的是在B中初始化的阿?
思危 2003-06-29
  • 打赏
  • 举报
回复
不好意思,上面的帖子回错了,楼主见谅啊!^o^
思危 2003-06-29
  • 打赏
  • 举报
回复
看 <MFC Windows程序设计>,就实际的MFC编程技术技巧来讲要比<深入浅出>和<技术内幕>要写的出色,几乎什么内容都可以找到,我推荐。
当然,如果经济条件允许的话,上面三本都买最好,各有所长,可以互补。
思危 2003-06-29
  • 打赏
  • 举报
回复
在类B的对象中实际存在两个名为str的成员变量。
成员变量并不能想虚函数那样动态绑定。所以通过A的指针访问B时实际得到了类A的成员变量
ZengYongChun 2003-06-29
  • 打赏
  • 举报
回复
up

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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