类和对象中带有new的用法指针
usage pointer with new in classes and objects
我想知道这个指针指向行中的什么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";
相关文章:
- 这个指针在c++中的用法
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 重载运算符new[]的行为取决于析构函数
- 过载'operator new'如何导致无限循环?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- Codelite C++ new project
- 在类c++中使用new声明数组
- g++用户定义的动态链接库上的全局new和delete运算符
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在将 new 与指针一起使用时,创建数组的指定长度
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- C++用法:" *(new int); "做什么?
- new在C++中的用法
- 类和对象中带有new的用法指针
- c++关键字new的奇怪用法