Passing array of pointers to template class method
Date : March 29 2020, 07:55 AM
fixed the issue. Will look into that further Check the C FAQ http://c-faq.com/aryptr/aryparmsize.htmlvoid Tree<Data>::createTree(Data* arrayData[], int sz)
{
...
}
Tree<string> tree;
tree.createTree(tab, sizeof(tab)/sizeof(tab[0]));
|
Cast array of pointers to derived class to array of pointers to base class
Date : March 29 2020, 07:55 AM
seems to work fine No. What you’re asking for here is a covariant array type, which is not a feature of C++. The risk with reinterpret_cast, or a C-style cast, is that while this will work for simple types, it will fail miserably if you use multiple or virtual inheritance, and may also break in the presence of virtual functions (depending on the implementation). Why? Because in those cases a static_cast or dynamic_cast may actually change the pointer value. That is, given class A {
int a;
};
class B {
string s;
};
class C : public A, B {
double f[4];
};
C *ptr = new C();
|
Convert array of pointers of derived class to array of base class pointers
Tag : cpp , By : user185283
Date : March 29 2020, 07:55 AM
will help you The problem is, that (A*)d is not numerically equal to d! See, you have an object like +---------------------+
| A: vtable ptr A | <----- (A*)d points here!
| double a |
+---------------------+
+---------------------+
| D: | <----- d points here (and so do (C*)d and (B1*)d)!
|+-------------------+|
|| C: ||
||+-----------------+||
||| B1: vptr B1,C,D |||
||| double b1 |||
||+-----------------+||
||+-----------------+|| <----- (B2*)d points here!
||| B2: vptr B2 |||
||| double b2 |||
||+-----------------+||
|| double c ||
|+-------------------+|
| double d |
+---------------------+
A *a = static_cast<A *>(d);
A **aa = static_cast<A **>(&d);
|
Passing an array of pointers to a Class Object
Date : March 29 2020, 07:55 AM
I hope this helps you . Student *studentsArray[] is an array of pointers to students: [-> "John", -> "Mary", -> "Jack"] studentsArray[0] == (*studentsArray)
studentsArray[1] == *(studentsArray+1)
studentsArray[2] == *(studentsArray+2)
Student myArray[3] = {stud1, stud2, stud3};
Student* myArray[3] = { &stud1, &stud2, &stud3 };
#include <iostream>
#include "Student.hpp"
#include <string>
using namespace std;
void getName(Student *studentsArray[], int); //prototype
int main()
{
//Creates class objects with Constructors Name and Score
//Class object has a function getName() to return name
Student stud1("John", 100);
Student stud2("Mary", 90);
Student stud3("Jack", 85);
//Create an array of student objects
Student* myArray[3] = { &stud1, &stud2, &stud3 };
getName(myArray, 3);
return 0;
}
void getName(Student *studentsArray[], int arraySize)
{
for (int index = 0; index < arraySize; index++)
{
cout << studentsArray[index]->getName() << endl;
}
}
|
Passing an array of pointers and return an array of values pointed by those pointers
Tag : cpp , By : John Tate
Date : March 29 2020, 07:55 AM
|