Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类和对象中使用新的用法指针_C++ - Fatal编程技术网

C++ 在类和对象中使用新的用法指针

C++ 在类和对象中使用新的用法指针,c++,C++,我想知道这个指针在直线上指向什么 鸟*对象=新猫; 它是指向鸟的类型还是猫的类型 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 destr

我想知道这个指针在直线上指向什么 鸟*对象=新猫; 它是指向鸟的类型还是猫的类型

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);
}

如果存在虚拟函数,则可以使用以下命令确定对象类型

Cat*ptr= 动态_cast对象

如果*ptr==NULL 库特Omar Khaled

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

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

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

   return (0);
 }
int main()
 {
   Bird* object = new Cat;
   object->fly();
   object->printCat();
   return (0);
 }
您将看到以下输出:

 Bird's constructor
 Cat's constructor
 Bird's Fly
但是,如果运行以下代码:

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

   return (0);
 }
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对象中的Bird基类子对象。它是Bird*object=new Cat;很可能是有史以来最糟糕的示例代码!运行程序时的输出是什么?@igor Tandetink您所说的子对象是什么意思?没有虚拟成员的动态\u cast不会有很大帮助。本例中没有多态性。即使有,这个答案中的任何一行都没有编译的机会,说不准确,因为绝对没有描述你在做什么,也没有说明你为什么要做。括号和*被堆栈溢出修剪,用空格编辑,这使它显示代码,感谢您的评论首先感谢bro的简单回答,我的理解是,<对象指向Bird Base,是因为它内置了Bird类的函数,阻止我们访问Cat类的函数。调用Cat的构造函数是因为Cat类的子对象不是吗?嘿,Omar,很抱歉反应太晚-不得不出去一分钟;确切地你说得对&说得很好!!:0@Devrash德赛,没问题,兄弟:,再次感谢你令人惊讶的回答: