爱家,李云在,霹雳创世录
class base{ public: void pub_mem(); protected: int prot_mem; private: char pri_mem; }; class pub_derv : public base{ int f(){ pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pro_derv : protected base{ int f(){ pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pri_derv : private base{ int f(){ pub_mem(); return prot_mem; } }; int main(){ pub_derv pub; pro_derv pro; pri_derv pri; base& b1 = pub; base& b2 = pro;//error base& b3 = pri;//error }
class base{ public: void pub_mem(); protected: int prot_mem; private: char pri_mem; }; class pub_derv : public base{ int f(){ pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pro_derv : protected base{ friend void pro_fri(pro_derv&); int f(){ base& b = *this;//不论子类b以何种方式继承父类a,在子类b的成员函数和子类b的友元(非用户代码)里,都能把子类b的对象转换成父类a的对象。 pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pri_derv : private base{ friend void pri_fri(pri_derv&); int f(){ base& b = *this;//不论子类b以何种方式继承父类a,在子类b的成员函数和子类b的友元(非用户代码)里,都能把子类b的对象转换成父类a的对象。 pub_mem(); return prot_mem; } }; void pro_fri(pro_derv& pro){ base& b = pro;//不论子类b以何种方式继承父类a,在子类b的成员函数和子类b的友元(非用户代码)里,都能把子类b的对象转换成父类a的对象。 } void pri_fri(pri_derv& pro){ base& b = pro;//不论子类b以何种方式继承父类a,在子类b的成员函数和子类b的友元(非用户代码)里,都能把子类b的对象转换成父类a的对象。 } int main(){ pub_derv pub; pro_derv pro; pri_derv pri; base& b1 = pub; //base& b2 = pro; //base& b3 = pri; }
class base{ public: void pub_mem(); protected: int prot_mem; private: char pri_mem; }; class pub_derv : public base{ int f(){ pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pro_derv : protected base{ int f(){ pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pri_derv : private base{ int f(){ pub_mem(); return prot_mem; } }; class pub_pub_derv : private pub_derv{ friend void pubpubfri(pub_pub_derv&); int f(){ base& b = *this;//只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pro_pro_derv : private pro_derv{ friend void proprofri(pro_derv&); int f(){ base& b = *this;//只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 pub_mem(); return prot_mem; } //char g(){return pri_mem;}//error }; class pri_pri_derv : private pri_derv{ friend void priprifri(pri_derv&); int f(){ //base* b = *this;//error,只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 //pub_mem(); //return prot_mem; } }; void pubpubfri(pub_derv& pd){ base& b = pd;//只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 } void proprofri(pro_derv& pd){ base& b = pd;//只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 } void priprifri(pri_derv& pd){ //base& b = pd;//error,只用当子类b以public或者protected方式继承父类a后,在子类b的子类c的成员函数和子类b的子类c的友元里,才能把子类b的对象转换成父类a的对象 } int main(){ pub_derv pub; pro_derv pro; pri_derv pri; base& b1 = pub; //base& b2 = pro; //base& b3 = pri; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论