指向对象指针的如何更直白的理解?一个父类father,一个子类son ,son 从父类派生来的,主函数定义father *p=new son;我的理解是创建一个son 的对象,并把它的地址赋给father *p指针变量,则*p->fun()(假设fun
来源:学生作业帮助网 编辑:作业帮 时间:2024/10/02 09:04:42
指向对象指针的如何更直白的理解?一个父类father,一个子类son ,son 从父类派生来的,主函数定义father *p=new son;我的理解是创建一个son 的对象,并把它的地址赋给father *p指针变量,则*p->fun()(假设fun
指向对象指针的如何更直白的理解?
一个父类father,一个子类son ,son 从父类派生来的,主函数定义father *p=new son;
我的理解是创建一个son 的对象,并把它的地址赋给father *p指针变量,则*p->fun()(假设fun()是father的成员函数)意思就是用son的对象地址存储father调用成员函数并通过指针p赋给son的对象,可以这样理解吗?
还有一个问题了,就是如果不是派生或者继承关系,是否也能这样调用,如果调用会出现什么问题,真诚希望能够直白的回答,感觉指针这东西理解很是重要,不然调试很难搞懂!
指向对象指针的如何更直白的理解?一个父类father,一个子类son ,son 从父类派生来的,主函数定义father *p=new son;我的理解是创建一个son 的对象,并把它的地址赋给father *p指针变量,则*p->fun()(假设fun
"则*p->fun()(假设fun()是father的成员函数)意思就是用son的对象地址存储father调用成员函数并通过指针p赋给son的对象,可以这样理解吗?"
--这听起来怎么这么别扭呢,new son()是子对象地址,p是父类型指针,p接受子类型,这是合法的.
“还有一个问题了,就是如果不是派生或者继承关系,是否也能这样调用?”
--一般不可以,除非你要强制类型转换.你可以想象一下,int你可以转化到float,这里面牵扯到精度的转换而已,没关系.反正都是数.
但是你定义以dog,一个cat,你能指望一个cat转换成dog吗?
当然你可以强制(dog*)pdog = new cat();
但是,这有意义吗?
想象一下:你家的cat要生了,让dog去帮忙接生,cat会同意吗?显然不同意--因为类型不一致.
但是,你是主人,你告诉cat,如果不让dog去接生,你就要把它扔到沙漠里,cat会害怕,然后同意了.--虽然如此,那是你强制的:)
so.it is.