首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-27 
用基类指针创建的派生类到底是怎么回事?class A{}class B:public A{public:void f()int a}int main(){A

用基类指针创建的派生类到底是怎么回事?
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看帖不仔细啊。

热点排行