+ 1
Why only object is sliced , not the pointer
Refer code below : I have idea about object slicing and it works as expected for display1 and display2 When it comes to pointer , i have questions : 1. Why display3 works and dont show characteristic of slicing ? 2. Why passed pointer as reference shows same address both from demopointer and display3 3. Whats error if i uncomment display4 and how to solve this ? https://code.sololearn.com/cb3TobmTBIs1/?ref=app
2 Answers
+ 3
[2/2]
The compiler still throws an error. This is because you are passing a
"reference to (pointer to shape)" (shape*)
where a
"reference to (pointer to (const shape))" (const shape*&)
is expected.
This obviously, is not the same as
"reference to (const pointer to shape)" (shape* const&)
which is what you need here
https://code.sololearn.com/ce0CWaq9r3OW/?ref=app
Note that this change in type also solves point 3 of your question without any additional assignment (because not your function expects a const reference which accepts both lvalue and rvalue reference)
https://code.sololearn.com/cH8FVfLc9iG8/?ref=app
+ 3
[1/2]
1. Object slicing occurs when an object of a derived class is "assigned" to a base class. References and pointers do not cause object slicing. Any reference or pointer to a derived class can be safely casted to that of a base class. This happening in your display3 function
2. I don't quite understand what you're trying to ask. Are you asking why `pobj` in display3() shows the same address as pShape in pointerDemo()? It is because pobj and pShape point to the same address. pbj is a shape* which has been casted from pShape and literally refers to the 'shape' part of a 'triangle', a new object hasn't been formed
3. The problem is that when you pass a triangle* where a shape* (or const shape*&) is expected, the triangle* is casted to a shape*. This casting forms a new pointer of type shape* which is an rvalue (since it's not attached to the scope). The fix to this is to make a separate shape* variable and then pass it to the function.
https://code.sololearn.com/cvBXVutMK5so/?ref=app