嵌套类C ++中的嵌套类和继承

时间:2014-11-12 17:30:19

标签: c++ class inheritance nested-class

目前,我正试图在这些嵌套类中试验嵌套类和继承的用法。我正在运行的实验如下所示。在下面的代码中,我有一个外部类,在外部中有一个名为的类。另外,我创建了两个类, Child A Child B ,它们来自。我对下面的问题和关注进行了编号:

  1. 在课程外部中,我注意到当我尝试使用父亲爸爸创建成员变量爸爸,儿子和女儿时,我收到错误, 外部内的儿童 A和儿童 B。也就是说,我收到错误,说不允许使用不完整的数据类型。从这一点来看,它看起来程序无法看到构造函数或这些对象的指令。在某些示例中,即2:06处的此视频https://www.youtube.com/watch?v=C5X7h6h_tks,嵌套对象可以是外部中的成员变量。为什么这种方法合法,为什么我的方法不合适?如果我只是写:

    class Father;
    class ClassA;
    class ClassB;
    

    不会向编译器表明 ChildA ChildB 存在于外部中并且我应该能够在外部中创建这些类的成员变量?

  2. 此外,在成员函数 awesome 中,在外部类中,我可以声明变量,但是不是 ChildA ChildB 。这是为什么?是否有办法在 awesome 外部的声明中声明 ChildA ChildB 变量。

  3. 再次谈论成员函数 awesome ,我注意到我做不到

      Father* ptr; 
      ptr = &dummyB; 
      //Error: A value of type "Outside::ChildA *" cannot be assigned an entity of type
    

    但是,如果我在main函数中执行此操作,则不会出现错误。这是为什么?另外,当我尝试

    时,我收到类似的错误
    dad_ptr = a_ptr;
    

    其中dad_ptr和a_ptr是外部的成员变量。有没有办法将指向对象的指针的赋值更改为其子对象。我在这个实验中的主要目标是更改嵌套对象的指针在其所包含的对象中的分配

  4. ChildB 类的成员函数 something_crazy 中,以下内容是非法的:

    dad_ptr = a_ptr;
    

    由于此类源自,它位于外部之内,因此它无法访问 Outside <的成员函数和变量/ strong>以及?如何编辑我的代码,以便这些类可以访问外部。即使他们确实可以访问成员函数,这甚至可以做到。如果不是为什么?

    #include <iostream>
    #include <string>
    using namespace std;
    class Outside{
    
        public:
            int god;
        class Father;
        class ChildA;
        class ChildB;
        Outside(){
            //dad_ptr = new Father;
            cout << "Outside is envoked";
        }
        void run(){
            //ChildA lol;
        }
        void awesome();
    
    public:
    
        Father* dad_ptr;
        ChildA* a_ptr;
        ChildB* b_ptr;
    
        Father dad;// Error: incomplete datatype not allowed;
        ChildA son;//Error:incomplete datatype not allowed;
        ChildB daughter; //Error:incomplete datatype not allowed;
    
    
    public:
    
    };
    
    
    class Outside::Father{
    public:
        Father(){
            data = "Dad";
    
        }
        string data;
        virtual void something(){
            cout << "Father said something stupid";
        }
    
    
    };
    
    
    
    class ChildA : public Outside::Father{
    public:
        ChildA() {
            data = "Child A";
        }
        void something(){
            cout << "Child A said something stupid";
        }
    
    
    };
    
    class ChildB : public Outside::Father{
    public:
        ChildB() {
            data = "Child B";
        }
        void something(){
            cout << "Child B said something stupid";
        }
    
        void something_crazy(){
            dad_ptr = a_ptr; //Since Father is a nested of Outside, shouldn't a derive class have access to the objects of Outside.
        }
    
    };
    
    
    void Outside::awesome(){
        Father something; //Why can I create a variable father inside a member function, but cannot create it in the declaration of the class? Why can I create father, but not son or daughter?
        /*This cannot be done at all*/
        ChildA dummyA;
        ChildB dummyB;
        Father* ptr;
        ptr = &dummyB;
    
    
        //What I really want.
        dad_ptr = a_ptr; //Error: A value of type "Outside::ChildA *" cannot be assigned an entity of type "Outside::Father*";
    
    }
    
    int main(){
        ChildA dummyA;
        ChildB dummyB;
        Outside::Father* dad_pointer;
        ChildA* another_ptr;
        another_ptr = &dummyA;
        ptr = another_ptr;
        //ptrB = &dummyA;
        ptr = &dummyA;
        ptr->something_stupid();
        cout << endl;
        ptr = &dummyB;
        ptr->something_stupid();
        return 0;
    }
    

0 个答案:

没有答案