一、C++中可以实现子类向父类的转换,主要分为三种形式:

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,,0.8); test_print_11(cout,item,);//对象 转换不能实现多态
test_print_11(cout,item2,); cout<<endl;
test_print_22(cout,item,);//引用转换
test_print_22(cout,item2,); cout<<endl;
test_print_33(cout,&item,);//指针转换
test_print_33(cout,&item2,);
return ;
}
 
 

C++学习基础十一——子类对象向父类对象的转化的更多相关文章

  1. C++学习基础十——子类构造函数与析构函数的执行

    1.子类构造函数的执行: 先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数. 当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关 ...

  2. JavaScript学习 - 基础(五) - string/array/function/windows对象

    String对象 更详细转:http://www.w3school.com.cn/jsref/jsref_obj_string.asp //------------------------------ ...

  3. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...

  4. 对ES6中类class以及实例对象、原型对象、原型链之间关系的详细总结

    1. 类 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后用这个类来实例化对象.即类的用途:实例化对象. // 创建一个Person类 class Person { } // ...

  5. python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法

    在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object):     def spam(self):         print 'A.spam' class ...

  6. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  7. python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法

    一.什么是继承                                                                          继承是一种创建新的类的方式,在pyth ...

  8. python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法

    一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...

  9. 零基础入门学习Python(36)--类和对象:给大家介绍对象

    知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...

随机推荐

  1. Chapter 1: Design the application architecture

    1.1 Plan the application layers 提到了repository pattern,SoC(Separation of Concern), 进而提及MVC,Action/Act ...

  2. case使用例子

    echo 'Input a number between 1 to 4' echo 'Your number is:\c' read aNum case $aNum in 1) echo 'You s ...

  3. logstash无法使用conf启动

    最近刚开始学习使用logstash,再安装好后准备验证下第一个demo的时候,出现了问题 Error: Expected one of #, input, filter, output at line ...

  4. HDU 2222 关键词查找

    题目大意:给出一篇文章,长度最多1000000,若干个关键词,关键词有可能重复.关键词不超过10000,每个关键词不超过50个字符.请问该文章包含多少个关键词. 这是AC自动机的入门题.首先将关键词分 ...

  5. go 语言中常用的包

    来自学习go语言.pdf 译者刑星 ==== fmt 包fmt实现了格式化IO函数,这与c的printf和scanf类似,格式化短语派生于c %v 默认格式的值.当打印结构时,加号(%+v)会增加字段 ...

  6. 请求WebApi的几种方式

    目前所了解的请求WebAPI的方式有通过后台访问api 和通过js 直接访问api接口 首先介绍下通过后台访问api的方法,可以使用HttpClient的方式也可以使用WebRequest的方式 1. ...

  7. ( C++) Access the hard drive.

    // Open up the volume HANDLE hVolume = CreateFile(wstrPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHA ...

  8. OAF_开发系列16_实现OAF与XML Publisher整合

    http://wenku.baidu.com/link?url=y2SFKHP5qqn4bl_iNeqLGjXsTvhyFuhkMraIbWZdTXbzcv0vTefrZFFBDWie0cAAKuTw ...

  9. Ubuntu16.10 主题flatabulous安装

    以前通过apt直接安装的flatabulous主题16.10上安装会出现找不到包的情况,可以采用源码安装 原来的apt-get方式: 1:主题 sudo add-apt-repository ppa: ...

  10. DevExpress TreeList 全选和反选 z

    /// <summary> /// 全选树 /// </summary> /// <param name="tree">树控件</para ...