注册 登录
编程论坛 C++教室

box *p=new box1 ; 错了吗?请教……

tianxiao110 发布于 2010-07-31 10:58, 605 次点击
#include<iostream>
using namespace std;
class  box
{
       public:
       box(int x,int y,int z)
       {
               chang=x;
               kuan=y;
               gao=z;
       }
       virtual void show ()
       {
            cout<<chang<<"  "<<kuan<<"  "<<gao<<endl;
       }
       virtual ~box()
       {
             cout<<"基类清理"<<endl;
       }      
      
       protected:
       int chang;
       int kuan;
       int gao;
};
class box1:public box
{
      public:
      box1(int x,int y,int z,int u):box(x,y,z)
      {
            color=u;
      }
      virtual void show()
      {
           cout<<chang<<"  "<<kuan<<"  "<<gao<<"  "<<color<<endl;
      }
      virtual ~box1()
      {
              cout<<"派生类清理"<<endl;
      }        
      protected:
      int color;
};

int main()
{
    box *p=new box1;  //提示这里错了         
    delete p;
    system("pause");
    return(0);
}
6 回复
#2
mxs8102010-07-31 11:07
  box *p=new box1;  //提示这里错了  

要么box *p=new box;
要么box1 *p=new box1;  
不知道你要的那种结果呢?
#3
东海一鱼2010-07-31 11:20
box1(int x,int y,int z,int u):box(x,y,z);
你没有定义box1()这样无参的构造函数。
#4
tianxiao1102010-07-31 11:21
回复 2楼 mxs810
我的意思是:用基类的指针指向派生类对象,这个应该没问题吧?
#5
tianxiao1102010-07-31 11:24
回复 3楼 东海一鱼
谢谢你,问题解决了……
#6
东海一鱼2010-07-31 11:31
用基类的指针指向派生类对象,没有任何问题。反过来就要出问题。
就是“白马是马,马不一定白马”的概念。
#7
tianxiao1102010-07-31 11:33
回复 6楼 东海一鱼
呵呵  ,谢谢
1