读书人

用基类指针创建的派生类到底是咋回事

发布时间: 2013-02-27 10:48:11 作者: rapoo

用基类指针创建的派生类到底是怎么回事?
class A{};
class B:public A{
public:
void f();
int a;
}
int main()
{
A * p=new B();
}

用p无法访问B类的数据和成员函数,那么这个新建的对象存不存在f()和a?
用基类指针创建的派生类到底是咋回事
还有,我用的是VS Express for Desktop,不小心按了不知道什么出现了这些蓝点和方框,怎么取消??
[解决办法]

引用:
你所派生出来的类,都会拥有父类的方法及其属性的

而派生类中的方法及其属性,父类不一定有的,你用父类去访问子类的数据(父类中没有的),肯定是无法访问到的
[解决办法]
p只是声明为基类类型,但它的存储空间仍然是派生类B的结构,所以这个新建的对象是存在f()和a的。
[解决办法]
引用:
p只是声明为基类类型,但它的存储空间仍然是派生类B的结构,所以这个新建的对象是存在f()和a的。

要么加virtual让f成为虚函数,或者dynamic_cast类型转向子类
[解决办法]
要访问子类的成员,还是要先转化为子类才行。((B*)p)->f(),((B*)p)->a,不过这样就没啥意思了。
[解决办法]
存在。
Edit > Advanced > View White Space

[解决办法]
引用:
class A{};
class B:public A{
public:
void f();
int a;
}
int main()
{
A * p=new B();
}

用p无法访问B类的数据和成员函数,那么这个新建的对象存不存在f()和a?

还有,我用的是VS Express for Desktop,不小心按了不知道什么出现了这些……

当然还是存在的,只是你的指针类型是A类的,所以认为只能访问A类的成员,就无法访问B类的成员了。
[解决办法]
引用:
谢谢各位热心回答,我懂了
没人知道那些蓝点怎么取消吗?

看7L,LZ看帖不仔细啊。

读书人网 >C++

热点推荐