CWC_21 2022-05-24 22:43 采纳率: 0%
浏览 26

使用类模板前后,类内私有成员访问权限为何改变?

请看以下代码:
类A类B不使用类模板


#include <bits/stdc++.h>
using namespace std;

class A{
    private:
        int a1;
};
class B{
    private:
        A *a2;
};
void copy(const B &b1)
{
    A *a3=b1.a2;
}
int main(void) {
    
    return 0;
}

编译失败,提示:[Error] 'A* B::a2' is private

类A类B使用类模板

#include <bits/stdc++.h>
using namespace std;

template <class T>
class A{
    private:
        T a1;
};

template <class T>
class B{
    private:
        A<T> *a2;
};

template <class T>
void copy(const B<T> &b1)
{
    A<T> *a3=b1.a2;
}
int main(void) {
    
    return 0;
}

编译正常,可执行。

为什么类B的私有成员访问权限改变了?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2022-05-25 08:14
    关注

    因为那个是模板类,并不是具体的类型,跟具体类型实例化后就会报错

    评论

报告相同问题?

问题事件

  • 创建了问题 5月24日