Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

在一些情况下我们先定义类A,再定义类B(这样的定义顺序是因为类B有个成员函数返回类型A(而不是A的引用或指针)),但是在类A中有一个数据成员的类型是类B的引用,此时便需要在类A的定义前先申明B

// 申明模板类Graph
template <typename BatchSetType>
class Graph; 
// 定义模板类BlockCutTree
template <typename BatchSetType>
class BlockCutTree
{
    friend Graph<BatchSetType>; // 友元模板类Graph
    const Graph<BatchSetType> &g; // 模板类Graph的引用类型
public:
    BlockCutTree(const Graph<BatchSetType> &g):g(g){}
};
// 定义模板类Graph
template <typename BatchSetType>
class Graph
{
public:
    BlockCutTree<BatchSetType> func(); // 返回模板类BlockCutTree类型的参数
};

评论