首页 > 分享 > C++ 图的邻接矩阵表示

C++ 图的邻接矩阵表示

最新推荐文章于 2024-10-22 11:10:01 发布

ChanJose 于 2019-03-20 13:19:09 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

在C++中,当模板类的子类尝试访问父类的保护成员属性时,需要使用父类的类作用域限定符。由于此限制,作者在实现图的邻接矩阵时遇到问题,无法直接访问`maxVertices`。为解决这个问题,作者选择了不继承基类Graph,而是直接将Graph的保护成员属性放入新的类GrapMatrix中,以简化访问方式。文章包含了实现程序的代码片段和测试结果。

摘要由CSDN通过智能技术生成

1.遇到的问题:教材中写着子类Graphmtx(我用GrapMatrix)继承基类Graph

   

   但是我在子类GraphMatrix中使用父类Graph的保护成员属性:maxVertices 显示没有声明(如下图)。

        原来,c++中声明一个模板类及子类,在子类中如果需要访问父类的protected变量,需要使用父类的类作用域限定符,否则会报“identifier not found”错误。如果不是模板类,可以直接访问。

  例如:要如下这样使用父类的保护成员属性,太麻烦了。

所以,我就不用继承基类的方法了。直接把Graph父类的保护成员属性放到GrapMatrix类中。

2.实现程序:

   (1)GraphMatrix.h  

#ifndef GraphMatrix_h

#define GraphMatrix_h

#include <iostream>

using namespace std;

const int DefaultVertices = 30;

template <class T, class E>

class GraphMatrix {

public:

const E maxWeight = 100000;

GraphMatrix(int sz=DefaultVertices);

~GraphMatrix();

void inputGraph();

void outputGraph();

T getValue(int i);

E getWeight(int v1, int v2);

int getFirstNeighbor(int v);

int getNextNeighbor(int v, int w);

bool insertVertex(const T& vertex);

bool insertEdge(int v1, int v2, E cost);

bool removeVertex(int v);

bool removeEdge(int v1, int v2);

int getVertexPos(T vertex);

private:

int maxVertices;

int numEdges;

int numVertices;

T *VerticesList;

E **Edge;

};

template <class T, class E>

GraphMatrix<T, E>::GraphMatrix(int sz) {

int i, j;

maxVertices = sz;

numVertices = 0;

numEdges = 0;

VerticesList = new T[maxVertices];

Edge = new E*[maxVertices];

for(i = 0; i < ma

相关知识

图的储存
写一个c++能运行出来的玫瑰花代码
C++控制台渲染一朵逼真的玫瑰花
字符串 (C++/CX)
C++做的玫瑰花
基于机器学习的鸢尾花数据集的三分类算法的实现 C++
c++ TCHAR转string导致中文缺失或乱码问题及解决
小白初学C++的引用
探索C++之美:玫瑰花代码项目推荐
常见C/C++ XML解析器比较

网址: C++ 图的邻接矩阵表示 https://m.huajiangbk.com/newsview1117964.html

所属分类:花卉
上一篇: 1的365次方=1, 1.01的
下一篇: 统计字符串中的字符个数 pyth