C++学习基础十一——子类对象向父类对象的转化
2016-09-21 23:12
453 查看
一、C++中可以实现子类向父类的转换,主要分为三种形式:
1.对象转换:不能实现动态绑定,即不能实现多态。
2.引用转换:动态绑定,实现多态。
3.指针转换:动态绑定,实现多态。
注意:一般不会出现父类转化为子类的情况。
二、代码片段如下:
1.对象转换:不能实现动态绑定,即不能实现多态。
2.引用转换:动态绑定,实现多态。
3.指针转换:动态绑定,实现多态。
注意:一般不会出现父类转化为子类的情况。
二、代码片段如下:
#include <iostream> #include <string> using namespace std; class Item_base { public: Item_base(const string &is,double p):isbn(is),price(p){} string book() { return isbn; } virtual double calMoney(int c) { return c * price; } private: string isbn; protected: double price; }; class Bulk_item : public Item_base { public: Bulk_item::Bulk_item(const string &is,double p,int c,double dis): Item_base(is,p),min_py(c),discocunt(dis){} double calMoney(int c) { if(c >= min_py) { return c * price * discocunt; } else { return c * price; } } void test() { cout<<endl<<"子类测试!!"<<endl; } private: int min_py; double discocunt; }; //引用转换和指针转化可以实现动态绑定,即多态 //对象转化不能实现动态绑定 //对象转化 void test_print_11(ostream &out,Item_base item,size_t n) { out<<"ISBN :"<<item.book()<<"\t total monkey = "<<item.calMoney(n)<<endl; } //引用转换 void test_print_22(ostream &out,Item_base &item,size_t n) { out<<"ISBN :"<<item.book()<<"\t total monkey = "<<item.calMoney(n)<<endl; } //指针转换 void test_print_33(ostream &out,Item_base *item,size_t n) { out<<"ISBN :"<<item->book()<<"\t total monkey = "<<item->calMoney(n)<<endl; } int main() { Item_base item("x-123-1234-x",10.0); Bulk_item item2("123-456-x",10.0,10,0.8); test_print_11(cout,item,10);//对象 转换不能实现多态 test_print_11(cout,item2,10); cout<<endl; test_print_22(cout,item,10);//引用转换 test_print_22(cout,item2,10); cout<<endl; test_print_33(cout,&item,10);//指针转换 test_print_33(cout,&item2,10); return 0; }
相关文章推荐
- C++之面向对象学习基础一
- C++ 类的继承,子类以及之类的对象 对父类成员函数的访问权限
- C++学习笔记5:从方法到属性(面向对象基础)
- 父类转子类,c++对象布局
- [MFC学习之C++基础] 孙鑫视频中第三讲中提到的小测试程序(关于基类和子类的继承关系)
- C++基础学习笔记----第十一课(类的静态成员、对象模型初步认识)
- c++中 子类对象与父类对象的内存关系
- C++基础——子类转父类转子类 (派生类转基类转派生类)
- 【初级】C++中子类对象转型为父类对象时,编译器默默做了什么?
- 《面向对象基础:C++实现》学习笔记之八
- 《面向对象基础:C++实现》学习笔记之一
- C++关于父类指针指向子类对象的问题
- 《面向对象基础:C++实现》学习笔记之五
- C++学习笔记4:面向对象的基础之类与对象
- c++基础学习第一天(类与对象)
- c++中父类和子类能相互转化问题
- 《面向对象基础:C++实现》学习笔记之四
- [C++基础]在子类中向父类的构造函数传递参数的小例子,包括类中常量的初始化
- 理解c++对象模型,子类与父类关系
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象