如何在C ++中原型声明一个继承的类?

时间:2017-04-16 18:12:38

标签: c++ oop inheritance function-prototypes

我正在制作一个项目,需要多个课程,其中一些是继承的!! 所以我在定义之前在主类中使用一个继承的类! 请帮助我如何使用原型声明继承class.thanks !!

示例:

  class A
{
  /*data*/
};
  class B:public A 
 {public:
   void func()
   {
       C obj;
   }
   };
class C:public B
{
};`

1 个答案:

答案 0 :(得分:0)

只有函数有原型。你可以用课做的是转发声明它。

class MyFutureClass;
struct MyFutureStruct;

这是一个不完整的课程。不,C ++中的结构与类相同,只是默认情况下它们具有公共访问权限,类具有私有性。要使它们完整,您应该在代码中的任何位置提供定义。

不完整的类只是一种可能的不完整类型。以下类型是不完整类型:

  • type void;
  • 已声明但未定义的类类型;
  • 未知大小的数组;
  • 不完整类型的元素数组;
  • 枚举类型,直到确定其基础类型。

现在您可以使用不完整的课程吗?

  1. 声明指针变量或类字段
  2. 声明接受参数或不完整类型返回的函数或方法,而不定义它。
  3. 您可以做些什么?

    1. 通过其他类继承不完整的类
    2. 定义不完整类型的对象字段
    3. 声明不完整类型的非静态类数据成员
    4. 使用不完整的类类型作为模板的参数
    5. 定义使用不完整类型的参数或
    6. 的函数
    7. 执行隐式或显式转换为不完整的类,隐式或显式,左值到右值转换,标准转换,dynamic_cast或static_cast到指针或不完整类型的引用,除非从空指针常量转换或从指针转换void(void *总是可以转换,void永远不会定义)
    8. 访问不完整的课程'成员或方法
    9. 使用创建不完整类型对象的新表达式
    10. 在catch-clause
    11. 中使用它
    12. 使用typeid,sizeof或alignof运算符
    13. 在指向不完整的类的指针上使用算术运算符(因为sizof当然不知道)
    14. 需要什么?

      1. 当一个类依赖于其他
      2. 的存在和功能时,为了避免标题的循环依赖
      3. 减少单个文件中包含的标头数量。您可以定义具有指针的类和声明类的形式参数,而无需定义它
      4. 让我们看一下,这是避免循环使用标题的绝对无用的例子。

        [class_a.h]

        class B;
        
        class A
        {
            B* p;
        public:
            A ( B& value );
        };
        

        [class_b.h]

        #include "class_a.h"
        
        class B : public A   // we need complete A to inherit it
        {
            int a;
        public:
            B ( const B& );
        };
        

        [class_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. Conundrum?不。感谢前向声明,我们可以在不定义B的情况下定义A类。

        (PS。如果有人审查了代码并发现了一些不可能的东西,我明确允许修复它是因为......我已经睡着了)