如何使用单独文件中的派生类访问友元函数对象
How do I access the friend function objects with my derived classes in seperate files?
我有3个单独的头文件。A类、B类衍生为A类和类。
class A {
public:
virtual void foo(C ...object...);
};
class B : public A {
public:
void foo(C ...object...);
};
class C {
public:
friend class A;
friend class B;
private:
A *arr[num][num];
};
Arr是2D数组的指针。二维阵列的内部填充了B个对象。如何从B类的头文件访问C类对象?有可能吗?如果可能的话;包括.h";将头文件和foo函数原型分离?
将代码拆分为单独文件的常见方法如下:
-
A.h
#pragma once class C; class A { public: virtual void foo(C c); };
类
A
不需要C
的任何类型信息。成员函数foo
的声明不需要完整的类型信息,而需要声明,因为该函数需要C
类型的参数。 -
A.cpp
#include "A.h" #include "C.h" void A::foo(C c) {}
函数
A::foo(C c)
的定义需要C
的完整类型信息。因此包含了C
的类定义。 -
B.h
#pragma once #include "A.h" class C; class B : public A { public: void foo(C c) override; };
类
B
需要A
的完整类型信息才能进行继承。因此包含了A
的类定义。不需要C
类的完整类型信息(见A.h(。 -
B.cpp
#include "B.h" #include "C.h" void B::foo(C c) {}
与A.cpp 中相同
-
C.h
#pragma once class A; class C { public: friend class A; friend class B; private: A *arr[5][5]; };
类
C
只包含A
和B
的友元声明以及指向类型A
的指针。友元声明不需要声明或完整的类型信息。由于指向对象的所有指针都具有相同大小,因此类CCD_ 16的完整类型信息是不必要的。当指针被取消引用时,它将变得必要。
所有源文件还包含相应头文件的include。
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 类C++友元函数无法访问封装的类
- C++:成员不可访问-使用友元函数允许一个类修改另一个类的成员数据
- 正确的友元定义,以授予 std::map 对私有默认构造函数的访问权限
- 友元函数无法访问私有类成员
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?
- 为什么友元函数无法访问继承类的私有变量?
- C++友元函数无法访问类的公共函数
- C++重载友元函数无法访问私有成员
- 类具有友元函数.该函数在不同的头文件中的同名 apce 中定义.它无法访问私有成员
- 在子类函数中访问超类友元的受保护数据成员
- 虚函数可以访问基类的友元吗?
- 访问友元类模板基子句中的私有定义
- 如何访问友元类方法?
- 在类中实现的 C++ 友元函数无法访问私有
- 访问友元类之间的函数变量
- 使用指针访问友元类成员函数