我想知道这个指针指向行中的什么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";