类和对象中带有new的用法指针

  • 本文关键字:new 用法 指针 对象 c++
  • 更新时间 :
  • 英文 :


我想知道这个指针指向行中的什么Bird*object=新猫;它指向的是Bird类型的对象还是Cat类型的对象?

class Bird
{
public:
  Bird() { cout << "Bird's constructorn"; }
  void fly() { cout << "Bird's Flyn"; }
  void print() { cout << "Bird's printn"; }
  ~Bird() { cout << "Bird's destructorn"; }
};
class Cat : public Bird
{
public:
  Cat() { cout << "Cat's constructorn"; }
  void fly() { cout << "cat's Flyn"; }
  void printCat() { cout << "Cat's printn"; }
  ~Cat() { cout << "Cat's destructorn"; }
};
int main()
{
  Bird* object = new Cat;
  return (0);
}

奥马尔·哈立德,

回答问题的最好方法就是简单地运行代码!

正如Igor所提到的,object所指向的变量是一个Bird基,在Cat中有一个子类对象。这意味着在运行时,首先调用基类(Bird类)的构造函数,然后调用Cat类的构造函数。该对象将继续包含派生类重载的函数,但不会包含派生类的添加函数。如果您运行以下代码:

int main()
 {
   Bird* object = new Cat;
   object->fly();
   return (0);
 }

您将看到以下输出:

 Bird's constructor
 Cat's constructor
 Bird's Fly

但是,如果您运行以下代码:

int main()
 {
   Bird* object = new Cat;
   object->fly();
   object->printCat();
   return (0);
 }

您将注意到以下错误:

        main.cpp:27:11: error: class Bird has no member named printCat
       object->printCat();
       ^

如果你有任何问题,请告诉我!

如果有虚拟函数,可以使用以下方法来确定对象类型

Cat*ptr=dynamic_cast<Cat>>对象;

如果(*ptr==NULL)cout<lt;"对象指向Bird";

最新更新