Suppose we want to create a class for Graph. The class stores adjacency matrix representation of the graph. Therefore, our class structure would be something like below.
error: invalid use of non-static data member 'Graph::V'.
Even if we make V static, we get error “array bound is not an integer constant”
C++ doesn’t allow to create an stack allocated array in a class whose size is not constant. So we need to dynamically allocate memory. Below is a simple program to show how to dynamically allocate 2D array in a C++ class using a class for Graph with adjacency matrix representation.
0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1
A note on call of memset():
memset() is used separately for individual rows. We can’t replace these calls with one call because rows are allocated at different addresses and making a memset call like below would be disastrous.
// Wrong!! (Rows of matrix at different addresses) memset(adj, false, V*V*sizeof(bool));
This article is contributed by Dheeraj Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
- How to create an unordered_map of user defined class in C++?
- What are the data types for which it is not possible to create an array?
- Array of Strings in C++ (3 Different Ways to Create)
- Array class in C++
- Where is an object stored if it is created inside a block in C++?
- How to create an unordered_map of pairs in C++?
- When does compiler create default and copy constructors in C++?
- Does C++ compiler create default constructor when we write our own?
- OpenCV C++ Program to create a single colored blank image
- Input-output system calls in C | Create, Open, Close, Read, Write
- What is Dynamic Memory Allocation?
- How are variables scoped in C - Static or Dynamic?
- How to restrict dynamic allocation of objects in C++?
- C | Dynamic Memory Allocation | Question 1
- C | Dynamic Memory Allocation | Question 2