关于new操作符的使用问题

zhouqing19871024 2008-11-15 08:47:12
#include <iostream>
using namespace std;
class Point
{public:
Point(){}
~Point()
{cout<<"executing Point destructor"<<endl;}
};
class Circle:public Point
{public:
Circle(){}
~Circle()
{cout<<"executing Circle destructor"<<endl;}
private:
int radus;
};

int main()
{Point *p=new Circle;//这个地方为什么new的后面不是Point呢,如果写成Circle应该编译会出错的,可实际上却没有
delete p; //应该是动态申请一个Point类,用Point类对像的指针p来指向它呀?
return 0;
}

程序结果输出为:executing Point destructor
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouqing19871024 2008-11-15
  • 打赏
  • 举报
回复
呵呵 谢谢大家 偶已经找到答案了
通过基类指针可以访问派生类的虚方法,但是不可以访问非虚方法。
派生类的某个方法是基类所没有的,况且不是虚方法,则只能通过派生类对象或指针来调用。可以将基类指针强制转换为派生类指针,但是这样做是不安全的。

但还有另外一贴是这个程序的修改版 有新的问题 还忘帮我看看
Longinc 2008-11-15
  • 打赏
  • 举报
回复
建议好好看书
cranium 2008-11-15
  • 打赏
  • 举报
回复
子类的指针可以向基类指针安全转换,但一般情况下不可以反过来的。

继承抽象的基类可以使得一组这样实现了共同接口的对象有着相同的行为,这种将子类指针传递给基类指针的做法相当普遍。
走好每一步 2008-11-15
  • 打赏
  • 举报
回复
呵呵,看书吧,也就几页书而已
继承看到虚拟函数那就明白了
要不搜搜就好了
P_ghost 2008-11-15
  • 打赏
  • 举报
回复
在这里顺便再告诉个你应该关心的问题吧,就是delete的时候是按照哪个类型来计算的呢?
父类?子类?呵呵
会发生对象截断吗?
这些问题才应该关心一下,呵呵。
zhouqing19871024 2008-11-15
  • 打赏
  • 举报
回复
额 大哥 人有时也有糊涂的时候 不可能时时都保持清醒的头脑,即使是在一些很小的问题上也会如此啊
在这里我只是突然对new的使用不明确了

我认为这里应该是写成Point *p=new Point ????????
lzr4304061988012 2008-11-15
  • 打赏
  • 举报
回复
LZ搜一下基类指针.
太乙 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhouqing19871024 的帖子:]
#include <iostream>
using namespace std;
class Point
{public:
Point(){}
~Point()
{cout < <"executing Point destructor" < <endl;}
};
class Circle:public Point
{public:
Circle(){}
~Circle()
{cout < <"executing Circle destructor" < <endl;}
private:
int radus;
};

int main()
{Point *p=new Circle;//这个地方为什么new的后面不是Point呢,如果写成Circle应该编译…
[/Quote]

晕,是继承啊,也就是多态

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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