Re: Question regarding cast
On 2013-06-19, somenath <somenathpal@gmail.com> wrote:
I have come to know from C++ book that "a single object (e.g an
object of type derived) might have some more than one address (e.g its
address when pointed to by Base * pointer and its address when pointed
to by a Derived* pointer). That cannot happen in C"
So to understand this concept I wrote the following program
#include<iostream>
using namespace std;
class Base { };
class Derived:public Base
{
};
int main (void) {
Derived d;
Derived *d1;
Base *bp = &d;
d1= &d;
cout<<"bp = "<<bp<<endl;
cout<<"&d = "<<&d<<endl;
cout<<"d1 = "<<d1<<endl;
return 0;
}
===
Output
bp = 0x28ac57
&d = 0x28ac57
d1 = 0x28ac57
Try this:
/* begin code */
#include <iostream>
class Base1 { char i; };
class Base2 { char j; };
class Derived : public Base1, public Base2 {};
int main()
{
Derived d;
Base1 *b1 = &d;
Base2 *b2 = &d;
std::cout << "&d=" << &d << " b1=" << b1 << " b2=" << b2 << "\n";
return 0;
}
/* end code */
/* begin output /*
&d=0x7f7fffffdb40 b1=0x7f7fffffdb40 b2=0x7f7fffffdb41
/* end output */
Along with this I am interested to know how the C++ compiler restrict
the access of function defined only in derived class from a base class
pointer.
For example in the following code
class Base { };
class Derived:public Base
{
public:
void print()
{
cout<<"Inside derived "<<endl;
}
};
int main (void) {
Derived d;
Base *bp = &d;
bp->print();
return 0;
}
how the compiler makes sure that "bp" can not access "print" ?
bp has type "pointer to Base" and Base has no member called "print",
so bp->print() makes no sense.
You could add such a member to the definition of Base:
class Base
{
public:
virtual void print()
{
std::cout << "Inside base\n";
}
};
Now class Base has a "print" member function; this function is
overridden in class Derived, so when you call
bp->print();
while bp points to a Derived object, it will print "Inside derived".
Could you please provide me some resources which explain this topics?
Any good book on C++.
For online material, see e.g. www.cplusplus.com, in particular
http://www.cplusplus.com/doc/tutorial/polymorphism
or search for Bruce Eckel's (free) online book "Thinking in C++".