📜  C++中的匿名类

📅  最后修改于: 2021-05-30 11:24:32             🧑  作者: Mango

匿名类是没有名称的类。 C++支持此功能。

  • 这些类不能具有构造函数,但可以具有析构函数。
  • 这些类既不能作为参数传递给函数,也不能用作函数的返回值。

举例说明匿名类

  1. 创建匿名类的单个对象:在第一个示例中,创建的匿名类的对象名为obj1。 obj1的范围遍及整个程序。因此,我们可以将其访问到main函数。通常,使用obj1,将对匿名类的成员函数进行调用。
    // CPP program to illustrate 
    // concept of Anonymous Class
    #include 
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i : " << this->i << endl;
        }
          
    } obj1;     // object for anonymous class
      
    // Driver function
    int main()
    {
        obj1.setData(10);
        obj1.print();
        return 0;
    }
    

    输出 :

    Value for i : 10
    
  2. 创建两个匿名类的对象:在第二个示例中,我们为匿名类创建了两个对象obj1和obj2,并调用了该类的成员函数。 obj1和obj2的范围贯穿整个程序。同样,我们可以为一个匿名类创建多个对象。
    // CPP program to illustrate 
    // concept of Anonymous Class
    #include 
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i : " << this->i << endl;
        }
          
    } obj1, obj2;    // multiple objects for anonymous class
      
    // Driver function
    int main()
    {
        obj1.setData(10);
        obj1.print();
      
        obj2.setData(20);
        obj2.print();
        return 0;
    }
    

    输出 :

    Value for i : 10
    Value for i : 20
    
  3. 限制匿名类的范围:要限制匿名类的对象的范围,我们可以使用typedef的帮助。在第三个示例中,通过使用typedef,我们可以为类提供一个方便的名称,并使用该名称为匿名类创建多个对象obje1和obj2。在这里,我们可以控制obj1和obj2对象的范围,这些对象位于main函数。
    // CPP program to illustrate 
    // concept of Anonymous Class
    // by scope restriction
    #include
    using namespace std;
      
    // Anonymous Class : Class is not having any name
    typedef class
    {
        // data member
        int i; 
    public:
        void setData(int i)
        {
            // this pointer is used to differentiate 
            // between data member and formal argument.
            this->i = i;
        }
        void print()
        {
            cout << "Value for i :" << this->i << endl;
        }
          
    } myClass;      // using typedef give a proper name
      
    // Driver function
    int main()
    {
        // multiple objects
        myClass obj1, obj2; 
        obj1.setData(10);
        obj1.print();
      
        obj2.setData(20);
        obj2.print();
        return 0;
    }
    

    输出 :

    Value for i : 10
    Value for i : 20
    
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”