【C++】嵌套类、友元

黄邦勇帅 里面关于嵌套类的介绍我有疑惑。里面11.9说在创建一个外围类的对象时先执行嵌套类的构造函数然后再执行外围类的构造函数,析构函数则以相反的方式执行。

可是我编程实验了一下,创建外围类对象时并不会执行嵌套类的构造函数

#include<iostream>
using namespace std;

class A
{
public:
    int a, b, c;
    A()
    {
        a = b = c = 0;
        cout << " A construct" <<endl;
    }class B
    {
    public:
        int a, b, c;
        B()
        {
            a = b = c = 0;
            cout << "B construct" <<endl;
        }
    };
};

int main()
{
    A ca;
    
    return 0;
}

友元

  声明友元的目的是让类的非成员函数或者类能访问该类对象的私有和受保护成员

  1. 友元函数不能直接访问类中的私有成员只能通过类的对象来访问 私有成员 ,

      class A{int a; pulbic:friend void g();}

      则void g(){a=2;}就是错误的

      void g(){A m; m.a=2;}就是正确的

  2. friend 出现的位置对友元来说无关紧要。即把友元声明在公有私有和受保护的位置都是一样的。

  3. 要在类中定义友元函数或者友元类那么该类或者函数必须在外围类外进行声明,注意是声明不是定义 ,声明的位置无关紧要,只要在使用之前声明一下就行。

         (这里是讲类内定义的情况,如果是类外定义的只用在类里面声明一下是友元就可以了)

class A
{
    int a;
    friend void f(){cout<<"f"<<endl;}
}; //在类中定义友元函数
int main() 
{
    void f(); //访问类中定义的友元的示例,使用之前要进行声明,如果在全局范围类声明了友元
    f();      //函数f()则函数f()就可以在全局范围类使用。如果在局部声明则只能在局部使用。
}

     

原文地址:https://www.cnblogs.com/dplearning/p/4783922.html