用法指针与类和对象中的新用法

时间:2014-09-03 00:06:44

标签: c++

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

class Bird
{
public:
  Bird() { cout << "Bird's constructor\n"; }
  void fly() { cout << "Bird's Fly\n"; }
  void print() { cout << "Bird's print\n"; }
  ~Bird() { cout << "Bird's destructor\n"; }
};

class Cat : public Bird
{
public:
  Cat() { cout << "Cat's constructor\n"; }
  void fly() { cout << "cat's Fly\n"; }
  void printCat() { cout << "Cat's print\n"; }
  ~Cat() { cout << "Cat's destructor\n"; }
};

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

2 个答案:

答案 0 :(得分:0)

如果有虚函数,可以使用以下内容确定对象类型

Cat * ptr = 的dynamic_cast&LT; Cat *&gt;对象;

if(* ptr == NULL)    COUT&LT;&LT; “对象指向鸟”;

答案 1 :(得分:0)

Omar Khaled,

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

正如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();
       ^

如果您有任何疑问,请与我们联系!