一、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. WindowsAPI开发常用资料

    主类 子类 功能 Win32API SHGetSpecialFolderLocation 获取系统特殊文件夹路径(SHGetSpecialFolderLocation) 通过 SHGetSpecial ...

  2. JS中正则匹配的三个方法match exec test的用法

    javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

  3. 使用dispatch_semaphore_t实现event的基本功能

    在Windows平台下, 对线程的同步控制,可以有Critical Section,Mutex,Semaphore,Event 等方式. 在IOS平台,使用GCD进行简单的多线程编程时,可以使用dis ...

  4. [原创]cocos2d-x研习录-第三阶 特性之粒子系统

    我想接触过游戏引擎的同学,对粒子系统应该不会陌生.它用于解决由大量按一定规则运动(变化)的微小物质在计算机上的生成和显示问题.粒子系统在游戏中有着非常广泛的应用,可以模拟很多现象,如火花.爆炸.烟雾. ...

  5. Qt开发中的实用笔记一--xml,Qpainter,Delegate:

    因为开发环境不能联网,开发中用到有用的知识就记在word稳定中,不知不觉就记载了几十页,为避免笔记丢失,现在就一点点忘博客上搬,方便日后回顾! ---------------------------- ...

  6. .pyc是个什么鬼?

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...

  7. FastDFS文件系统(二) fastdfs和其他文件系统区别

    FastDFS文件系统(二) fastdfs和其他文件系统区别 一.概述 普通存储方案:Rsync.DAS(IDE/SATA/SAS/SCSI等块).NAS(NFS.CIFS.SAMBA等文件系统). ...

  8. 【linux编程】linux中HZ和Jiffies的关系

    读cubic源码的时候遇到了HZ和jiffies,不懂这两者代表什么.网上描述的是这样的 全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中 ...

  9. 同时闪烁多个要素代码(ArcEngine)

    /// <summary> /// 根据查询条件构造/// </summary> /// <param name="where">查询条件< ...

  10. WCF配置

    服务端 <system.serviceModel> <services> <service name="WCF.Homedo.Service.Cache.Ser ...