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
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德赛,没问题,兄弟:,再次感谢你令人惊讶的回答: