C++ 如何在C++;?
我正在做一个项目,它需要多个类,其中一些是继承的!! 因此,在定义主类之前,我在主类中使用一个继承类! 请帮助我如何使用继承类的原型声明。谢谢 例如:C++ 如何在C++;?,c++,oop,inheritance,function-prototypes,C++,Oop,Inheritance,Function Prototypes,我正在做一个项目,它需要多个类,其中一些是继承的!! 因此,在定义主类之前,我在主类中使用一个继承类! 请帮助我如何使用继承类的原型声明。谢谢 例如: class A { /*data*/ }; class B:public A {public: void func() { C obj; } }; class C:public B { };` 只有函数有原型。使用类可以做的是向前声明它 class MyFutureClass; struct
class A
{
/*data*/
};
class B:public A
{public:
void func()
{
C obj;
}
};
class C:public B
{
};`
只有函数有原型。使用类可以做的是向前声明它
class MyFutureClass;
struct MyFutureStruct;
这些是一个不完整的类。不,C++中的结构与类相同,只是默认情况下有公共访问,类具有私有。为了使它们完整,您应该在代码的任何地方提供定义
不完整类只是一种可能的不完整类型。以下类型为不完整类型:
- 类型无效李>
- 已声明但未定义的类类型李>
- 未知大小的数组李>
- 不完整类型的元素数组李>
- 枚举类型,直到确定其基础类型为止李>
class B;
class A
{
B* p;
public:
A ( B& value );
};
[类别b.h]
#include "class_a.h"
class B : public A // we need complete A to inherit it
{
int a;
public:
B ( const B& );
};
[a类cpp]
#include "class_b.h"
// to define this constructor we need complete A, but header with complete
// definition is already included within class_b.h header
A::A ( B& val) : p( new B(val)) // we created copy of B
{
}
所以,为了定义类A,我们需要类B,但是类B是类A的子类,所以它需要完整的定义A。难题?不需要。由于转发声明,我们可以在不定义B的情况下定义类A
(注:如果有人检查了代码,发现那里有不可能的地方,我将明确允许修复它…我睡着了)您需要显示您拥有的代码您的意思是要转发声明它吗?如果是这样的话,前向声明将产生完整的类型,而从不完整的类型继承是不可能的。@DanielCollier现在我已经写了一个示例@我不知道你想要什么,你不能从一个不完整的类型继承。您也不能实例化不完整类型的对象,您所能做的只是创建不完整类型的指针或引用的实例。不确定您想要完成什么,但在任何情况下您都可以做一些您无论如何都应该做的事情:将声明和实现分离到头文件和源文件中。在您的例子中,这将产生6个文件,A.h、A.cpp、B.h等。由于C仅用于B::func的实现中,所以这不会有问题,因为B.cpp只包含C.h,而B.h不需要C,这里没有问题。您可以使用
struct
关键字转发声明类,反之亦然。“我不这么认为,但这是完全正确的。”艾伦·斯托克斯是的,我知道,只有在定义阶段的访问权限不同,它们总是类