如何在单独的文件中使用派生的 类 访问友元函数对象?
How do I access the friend function objects with my derived classes in seperate files?
我有 3 个单独的头文件。 ClassA,ClassB导出A和Class.
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的指针array.The 2D数组里面填充了B objects.How 我可以从class的头文件中访问C class对象吗乙?可以吗?如果可以,“include.h”应该如何分隔头文件和foo函数原型?
将代码拆分为单独文件的常用方法如下:
A.h
#pragma once
class C;
class A {
public:
virtual void foo(C c);
};
Class A
不需要 C
的任何类型信息。成员函数 foo
的声明不需要完整的类型信息,而是一个声明,因为该函数需要一个 C
.
类型的参数
A.cpp
#include "A.h"
#include "C.h"
void A::foo(C c) {}
函数A::foo(C c)
的定义需要C
的完整类型信息。因此,包含了 C
的 class 定义。
B.h
#pragma once
#include "A.h"
class C;
class B : public A {
public:
void foo(C c) override;
};
Class B
需要完整的 A
类型信息才能继承。因此,包含 A
的 class 定义。 class 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];
};
Class C
仅包含 A
和 B
的友元声明以及指向类型 A
的指针。友元声明不需要声明或完整类型信息。由于所有指向对象的指针都具有相同的大小,因此不需要 class A
的完整类型信息。当指针被取消引用时,它将变得有必要。
所有源文件还包含相应头文件的包含。
我有 3 个单独的头文件。 ClassA,ClassB导出A和Class.
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的指针array.The 2D数组里面填充了B objects.How 我可以从class的头文件中访问C class对象吗乙?可以吗?如果可以,“include.h”应该如何分隔头文件和foo函数原型?
将代码拆分为单独文件的常用方法如下:
A.h
#pragma once class C; class A { public: virtual void foo(C c); };
Class
类型的参数A
不需要C
的任何类型信息。成员函数foo
的声明不需要完整的类型信息,而是一个声明,因为该函数需要一个C
.A.cpp
#include "A.h" #include "C.h" void A::foo(C c) {}
函数
A::foo(C c)
的定义需要C
的完整类型信息。因此,包含了C
的 class 定义。B.h
#pragma once #include "A.h" class C; class B : public A { public: void foo(C c) override; };
Class
B
需要完整的A
类型信息才能继承。因此,包含A
的 class 定义。 classC
的完整类型信息不是必需的(参见 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]; };
Class
C
仅包含A
和B
的友元声明以及指向类型A
的指针。友元声明不需要声明或完整类型信息。由于所有指向对象的指针都具有相同的大小,因此不需要 classA
的完整类型信息。当指针被取消引用时,它将变得有必要。
所有源文件还包含相应头文件的包含。