首页 > 代码库 > C++学习基础十——子类对象向父类对象的转化
C++学习基础十——子类对象向父类对象的转化
一、C++中可以实现子类向父类的转换,主要分为三种形式:
1.对象转换:不能实现动态绑定,即不能实现多态。
2.引用转换:动态绑定,实现多态。
3.指针转换:动态绑定,实现多态。
注意:一般不会出现父类转化为子类的情况。
二、代码片段如下:
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Item_base 7 { 8 public: 9 Item_base(const string &is,double p):isbn(is),price(p){}10 string book()11 {12 return isbn;13 }14 virtual double calMoney(int c)15 {16 return c * price;17 }18 private:19 string isbn;20 protected:21 double price; 22 };23 24 class Bulk_item : public Item_base25 {26 public:27 Bulk_item::Bulk_item(const string &is,double p,int c,double dis):28 Item_base(is,p),min_py(c),discocunt(dis){}29 double calMoney(int c)30 {31 if(c >= min_py)32 {33 return c * price * discocunt;34 }35 else36 {37 return c * price;38 }39 } 40 void test()41 {42 cout<<endl<<"子类测试!!"<<endl;43 }44 private:45 int min_py;46 double discocunt;47 };48 49 //引用转换和指针转化可以实现动态绑定,即多态50 //对象转化不能实现动态绑定51 52 //对象转化 53 void test_print_11(ostream &out,Item_base item,size_t n)54 {55 out<<"ISBN :"<<item.book()<<"\t total monkey = "<<item.calMoney(n)<<endl;56 } 57 58 //引用转换59 void test_print_22(ostream &out,Item_base &item,size_t n)60 {61 out<<"ISBN :"<<item.book()<<"\t total monkey = "<<item.calMoney(n)<<endl;62 } 63 64 //指针转换65 void test_print_33(ostream &out,Item_base *item,size_t n)66 {67 out<<"ISBN :"<<item->book()<<"\t total monkey = "<<item->calMoney(n)<<endl;68 } 69 70 int main()71 {72 Item_base item("x-123-1234-x",10.0);73 74 Bulk_item item2("123-456-x",10.0,10,0.8);75 76 test_print_11(cout,item,10);//对象 转换不能实现多态 77 test_print_11(cout,item2,10);78 79 cout<<endl;80 test_print_22(cout,item,10);//引用转换 81 test_print_22(cout,item2,10);82 83 cout<<endl;84 test_print_33(cout,&item,10);//指针转换 85 test_print_33(cout,&item2,10);86 return 0;87 }
C++学习基础十——子类对象向父类对象的转化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。