地方网站如何做,软件开发项目流程管理,网站关键词优化技巧,泉州营销型网站建设子类对象会继承基类的属性的行为#xff0c;任何时候子类对象都可以被当做基类类型的对象#xff0c;通过子类对象可以直接访问基类中的成员#xff0c;如同是基类对象在访问它们一样向上造型和向下造型 向上造型(upcast)#xff1a;将子类类型的指针或引用转换为基类类型的…子类对象会继承基类的属性的行为任何时候子类对象都可以被当做基类类型的对象通过子类对象可以直接访问基类中的成员如同是基类对象在访问它们一样向上造型和向下造型向上造型(upcast)将子类类型的指针或引用转换为基类类型的指针或引用这种操作性缩小的类型转换在编译器看来是安全的可以隐式转换向下造型(downcast)将基类类型的指针或引用转换为子类类型的指针或引用这种操作性放大的类型转换在编译器看来是危险的不能隐式转化但是可以显式转换#includeiostreamusingnamespacestd;classHuman{private:intm_private;protected:string m_name;intm_age;constintget(void){returnm_private;}public:Human(conststringname,intage){m_namename;m_ageage;m_private1234;}voideat(conststringfood){cout我在吃: foodendl;}voidsleep(inthour){cout我睡了hour小时endl;}};classStudent:publicHuman{private:intm_no;//学号public:Student(conststringname,intage,intno):Human(name,age){m_nono;}voidwho(void){cout我叫: m_name, 今年m_age岁学号是: m_noendl;//cout m_private endl; //errorcoutget()endl;}voidlearn(conststringcourse){cout我在学courseendl;}};classTeacher:publicHuman{private:intm_salary;public:Teacher(conststringname,intage,intsalary):Human(name,age),m_salary(salary){}voidteach(conststringcourse){cout我正在讲 courseendl;}voidwho(void){cout我叫 m_name,今年m_age岁, 工资是m_salaryendl;}};intmain(void){Students(张飞,28,100011);coutsizeof(s) sizeof(s)endl;s.who();s.eat(宫保鸡丁);s.sleep(8);s.learn(C编程);Teachert(诸葛亮,34,200000);t.who();t.teach(嵌入式);t.sleep(7);t.eat(汉堡);// Student * ----- Human *:向上造型Human*phs;ph-eat(香蕉);ph-sleep(10);//ph-who(); //error// Human * -------- Student *: 向下造型合理Student*psstatic_castStudent*(ph);ps-who();Humanh(赵云,22);//Human * ------- Student *: 向下造型 (不合理)Student*ps2static_castStudent*(h);ps2-who();return0;}成员函数的重定义名字隐藏重定义: 简单的说就是子类中定义了和父类的同名函数对父类的成员函数造成了隐藏#includeiostreamusingnamespacestd;classBase{private:intx;public:voidset(inti){xi;}voidprint(){coutBase class x xendl;}};classDerived:publicBase{private:intm,n;public:voidset(intp,intk){mp;nk;}voidprint(){Base::print();coutDerived class m m, nnendl;}};intmain(void){Derived d;d.set(10,20);//d.set(100); // error 名字隐藏d.Base::set(100);d.print();return0;}