如何在c++的基类中创建派生类的对象
How to create an object of a derived class in a base class in c++
你好,我正在尝试创建一个程序,但我遇到了一些麻烦,我有3个类叫做Goku vegeta Beerus, Goku是基类,vegeta和Beerus从Goku继承,我想创建一个名为rose的vegeta对象和一个名为god的Beerus对象在Goku内部,但我得到了错误,有人能指出我将如何做到这一点,所有的帮助都是赞赏程序如下:
class Goku
{ public:
Goku();
˜ Goku();
string get_Name(void);
int get_power(void)
// This is what i want to do but keep getting errors
vegeta* rose;
Beerus* god;
};
class vegeta: public Goku
{
public:
vegeta(); //an intitializtion constructor
˜ vegeta();//destructor
string get_Name(void);
int get_power(void)
};
class Beerus: public Goku
{ public:
Beerus(); //an intitializtion constructor
˜ Beerus();//destructor
string get_Name(void);
int get_power(void)
};
注意我得到的错误是:vegeta不能命名一个类型Beerus不能命名一个类型
使用预声明类
类定义可能驻留在其他地方。但是这个类可以用于指向内存区域的指针。
class Beerus; // pre-declaring class
class GokuBlack; // pre-declaring class
class Goku
{
public:
Goku();
~Goku();
string get_Name(void);
int get_power(void);
GokuBlack* rose;
Beerus* god;
};
class vegeta : public Goku
{
public:
vegeta(); //an intitializtion constructor
~vegeta();
string get_Name(void);
int get_power(void);
};
class Beerus : public Goku
{
public:
Beerus(); //an intitializtion constructor
~Beerus();
string get_Name(void);
int get_power(void);
};
你的类有一个错误。当前,当您这样做时:
vegeta* rose;
Beerus* god;
此时,编译器不知道vegeta
和Beerus
是什么。为了解决这个问题,在代码的开头添加以下两行:
class Beerus;
class vegeta;
这告诉编译器,如果上面两个类中的一个被引用,在被完全定义之前,如在实例化中,那么编译器可以在文件的其余部分中查找该名称。
生活例子
让我们不讨论包含,只讨论转发声明,考虑:
#include "stdafx.h"
#include <iostream>
using namespace std;
class A;
class B;
class B
{
public:
B();
void print() { aObj->print(); } // error
private:
A* aObj; // it's ok because it's declared
};
B::B()
{
aObj = new A; // error
}
class A
{
public:
A(){}
void print() { cout << "A prints" << endl; }
};
现在的解决方案:
只需将构造函数B的定义移到类A下,并将B的print()移到类A下,一切就ok了!因为当初始化aObj时,它会在上面找到一个完整的a这是我们在使用包含类实现的头文件时使用的所以代码变成这样:
class A;
class B;
class B
{
public:
B();
void print(); // just prototype
private:
A* aObj;
};
class A
{
public:
A(){}
void print() { cout << "A prints" << endl; }
};
B::B()
{
aObj = new A; // correct
}
void B::print()
{
aObj->print(); // ok
}
相关文章:
- 如何使用"derived input class"创建派生类?
- 创建派生自可变参数模板包的类型元组
- 如何创建派生对象的向量?
- 与简单地创建派生类指针相比,将基类绑定到派生类有什么优点?
- 在基类中创建派生类的对象
- 根据参数创建派生类的新实例
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- std ::移动不要创建派生类
- 如何从现有基类对象创建派生类对象
- 如何创建派生指针类变量
- 尝试在基类之外创建派生类的实例时出错
- 从基创建派生类
- 在 C++ 的父类中创建派生的 CARS
- C 双重调度,出厂模式或一种从接收到的序列数据创建派生对象的方法
- C++ 抽象类和创建派生类
- 在创建派生类实例时提供基类构造函数参数
- 使用基构造函数创建派生对象
- 创建派生类构造函数时出错
- 如何在C++的基类中创建派生类的对象数组
- 在 C++ 中创建派生类