Thread View: gnu.g++
1 messages
1 total messages
Started by Naoki Saito (GEO-002) Ext. 5471
Wed, 04 Oct 1989 15:39
class derivation and pointers
Author: Naoki Saito (GEO-002) Ext. 5471
Date: Wed, 04 Oct 1989 15:39
Date: Wed, 04 Oct 1989 15:39
91 lines
2255 bytes
2255 bytes
Hello, folks! I'm using g++-1.34.2 on Sun3/60 with OS 4.0.1.
Suppose the class Y is derived from the class X. Then, consider the following
program segment.
X *px;
px = new Y();
In this case, px points to the object X or Y? And *px is considered as object
X or Y? I thought that px points to object Y and *px is considered as Y.
However, The following program confused me a lot. Especially, the last 4 lines:
px->mul_print(px1); => error at compilation time
px->mul_print(*px1); => works! *px1 is considered as X.
px->add_print(px1); => works! px1 is considered as Y, not the pointer to Y.
px->add_print(*px1); => error at run time. core dumps.
This is a bug of the g++-1.34.2? Or this is normal behavior and my programming
example is not appropriate? How does the AT&T C++ 2.0 handle these?
Thanks in advance,
Naoki Saito(saito@sdr.slb.com)
Schlumberger-Doll Research
=================================cut===========================================
#include <stream.h>
class X
{
protected:
float a;
public:
X();
X(float);
virtual void add_print(...){};
void mul_print(X&);
};
class Y : public X
{
protected:
float b;
public:
Y();
Y(float);
void add_print(Y&);
};
X::X()
{
a = 100.0;
}
X::X(float f)
{
a = f;
}
void X::mul_print(X& x)
{
cout << "mul_print of class X:" << a * x.a << "\n";
}
Y::Y() : ()
{
b = 10.0;
}
Y::Y(float f) : (f*2)
{
b = f;
}
void Y::add_print(Y& y)
{
cout << "add_print of class Y:" << a + b + y.a + y.b << "\n";
}
main()
{
X *px0, *px1;
px0 = new Y();
px1 = new Y(1.0);
// px0->mul_print(px1); error at compilation time.
px0->mul_print(*px1);
px0->add_print(px1);
// px0->add_print(*px1); error at run time. Bus error (core dumped)
}
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads