neXius if you have a *X member variable and put a derived *Y in it then yes you can only get at the member variables and functions declared in class X. If you design your class hierarchy well you should be able to get away with that and still get the desired behaviour just by overriding virtual functions. Another way as someone mentioned is to use runtime casting and type checking but more often than not that''s a workaround for a bad design.
Also you keep using examples like this:
class A {public: A() {};};class B : public A {public: B() : A() {};};
I realize these are just dummied up examples, but do you realize that this code accomplishes the exact same thing:
class A {};class B : public A {};
This is for a couple reasons. If you don''t declare a default constructor for A or B the compiler creates one for you. Also, when you construct a derived class it first constructs all the bases classes with their default constructors. So in some specific cases you do in a sense inherit constructors, but it isn''t done in general.
As for why constructors aren''t inherited in general: I can''t give you very concrete reasons but in my experience derived classes are designed in such a way that it really makes no sense to inherit constructors. The derived class often needs additional information or needs additional functionality for its constructor that simply isn''t provided by the base class. That''s why you''re creating a derived class, to have that extra functionality.