mohans@caterina.Eng.Sun.COM (Ram Mohan Srinivasan) (03/28/91)
I took a class in c++ and in doing one of the assignments, I came across the following problem.. I don't know what I'm doing wrong or whether this is the way things are supposed to work.. Can someone explain this to me ? Before U flame me for asking a dumb question - I am a novice c++ pgrmr - And that's my excuse :-) I have the following class declarations : class employee { int emp_no; char *emp_name; public: employee(); ~employee(); virtual void print(); }; class employee_pl_addr : public employee { char *address; public : employee_pl_addr(); ~employee_pl_addr(); void print(); }; class home_addr { char *address; char *tel_no; public : home_addr(); ~home_addr(); virtual void print(); }; class home_and_work : public home_addr, public employee_pl_addr { public : home_and_work() {} ~home_and_work() {} }; #Irrelevent stuff deleted.. # #The print() function in each class, just prints the members.. In my main program, I am trying to get at the virtual function print thus : home_and_work emp; ((employee *) &emp)->print(); ((employee_pl_addr *) &emp)->print(); ((home_addr *) &emp)->print(); The problem that I have is - I do not seem to be able to get at the class employee's print virtual function by ((employee *) &emp)->print(); instead, this calls the print() function of the class employee_pl_addr ! Has this something to do with class scopes ? I was under the impression that we could statically determine which virtual function is to be called in all the 3 above cases.. The examples given in my text call virtual functions this way. Or is it that we can get at virtual functions just one level up ? Oh, and I am using the C++ translator on SunOS 4.1.. thanks, Mohan Srinivasan. mohans@sun.com -- =============================================================================== Ram Mohan Srinivasan (415)-336-1272 (W)
mvm@jedi.harris-atd.com (Matt Mahoney) (03/29/91)
In article <10614@exodus.Eng.Sun.COM> mohans@caterina.Eng.Sun.COM (Ram Mohan Srinivasan) writes: >I do not seem to be able to get at the class employee's print virtual function >by > ((employee *) &emp)->print(); >instead, this calls the print() function of the class employee_pl_addr ! Try: emp.employee::print(); ------------------------------- Matt Mahoney, 407-727-5431, mvm@epg.harris.com #include <disclaimer.h> // disclaimer.hpp in Zortech