|
From: stevendaiy on 23 Apr 2008 16:03 While preparing for a c++ interview, I went through TC++PL(3rd edition, 24th) and studied Appendix C, i.e., technicalities. Specifically, I found one of the examples is puzzling to me on page 851, i.e., when a class Y2 is derived from a protected base X class, and another class Z2 is derived from the public base class Y2, in the memeber function Z2::f(Y2* py2) if we tried to do something like class X{ public: int a; }; class Y2: protected X{}; class Z2:public Y2{void f(Y2*);}; void Z2::f(Y2* py2) { X* px = this; //OK px = py2; //error } according to the book, the second statement is an error //error: X is a protected base of Y2, and Z2 is derived from Y2, //but we don't know if py2 is a Z2 or how Y2::X is used in a non-Z2 object My first question is that: isn't Y2 a member of Z2 (aka base class), so that access to X from Y2 is solely based on the relations between Y2 and X. I think it's equivalent to void Y2::g(Y2 *py2) //notice Y2:: not Z2:: { X* px = py2; //OK } My second question is that the above two sets of code BOTH compile under Microsoft VS 2003 and cygwin. It could be a compiler issue though. Thanks a lot for your time. Steven -- [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]
|
Pages: 1 Prev: Compiler ordering barriers in C++0x Next: Mapping Templates function betweeen 2 class |