c++ - 如何使用单独文件中的派生类访问朋友函数对象?
问题描述
我有 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是二维数组的指针,二维数组里面是B对象。如何从B类的头文件中访问C类对象?可能吗?如果可能的话,“include .h”应该如何分隔头文件和foo函数原型?
解决方案
将代码拆分为单独文件的常用方法如下:
啊
#pragma once class C; class A { public: virtual void foo(C c); };
类
A
不需要任何类型信息C
。成员函数的声明foo
不需要完整的类型信息,而是声明,因为该函数需要一个 type 的参数C
。A.cpp
#include "A.h" #include "C.h" void A::foo(C c) {}
函数的定义
A::foo(C c)
需要完整的类型信息C
。因此,包含的类定义C
。溴化氢
#pragma once #include "A.h" class C; class B : public A { public: void foo(C c) override; };
类
B
需要完整的类型信息A
才能继承。因此,包含的类定义A
。C
不需要完整的类类型信息(参见 Ah)。B.cpp
#include "B.h" #include "C.h" void B::foo(C c) {}
与 A.cpp 相同
通道
#pragma once class A; class C { public: friend class A; friend class B; private: A *arr[5][5]; };
类
C
只包含 and 的友元声明A
和B
指向 type 的指针A
。朋友声明不需要声明或完整的类型信息。由于所有指向对象的指针都具有相同的大小,因此类的完整类型信息A
是不必要的。当指针被取消引用时,它将变得有必要。
所有源文件还包含相应头文件的包含。
推荐阅读
- docker - 如何使用容器名称与 docker-compose 连接容器?
- ruby - Ruby Base64 检查它是否已编码
- matlab - 如何在 MATLAB 中修复永无止境的运行时
- postgresql - Elixir 无法连接到 PostgreSQL
- c# - 如何在运行应用程序时自动获取 64/32 位机器的注册表项?
- amazon-web-services - AWS 是否支持用于混合云的 Google-Anthos AMP?
- d3.js - 轴生成中链接语法的行为
- python-3.x - 当我使用 peewee 查询附加到列表时,列名会不断出现数据
- reactjs - 在状态数组上使用映射函数
- python - 正则表达式未捕获多行字符串