我想知道这个指针指向的是什么 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);
}
答案 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();
^
如果您有任何疑问,请与我们联系!