C++学习基础十一——子类对象向父类对象的转化
一、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++学习基础十一——子类对象向父类对象的转化的更多相关文章
- C++学习基础十——子类构造函数与析构函数的执行
1.子类构造函数的执行: 先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数. 当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关 ...
- JavaScript学习 - 基础(五) - string/array/function/windows对象
String对象 更详细转:http://www.w3school.com.cn/jsref/jsref_obj_string.asp //------------------------------ ...
- Java基础十一--多态
Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...
- 对ES6中类class以及实例对象、原型对象、原型链之间关系的详细总结
1. 类 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后用这个类来实例化对象.即类的用途:实例化对象. // 创建一个Person类 class Person { } // ...
- python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法
在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object): def spam(self): print 'A.spam' class ...
- Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)
一.Servlet简介 1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- 零基础入门学习Python(36)--类和对象:给大家介绍对象
知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...
随机推荐
- [Thinking in Java]Nothing but Java
1 对象(Double Elephants) 1.1 抽象 万物皆对象.什么东西都可以抽象成属性和方法,达到可重用的目的. 对象之间交流靠发送消息.就是通过调用某个特定对象的方法来达到消息传递的目的. ...
- js中event.target
event.srcElement从字面上可以看出来有以下关键字:事件,源 他的意思就是:当前事件的源, 我们可以调用他的各种属性 就像:document.getElementById(&quo ...
- (转) Playing FPS games with deep reinforcement learning
Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- 收集一些有用的docker镜像
https://hub.docker.com/explore/ 是star排名靠前的image =================================================== ...
- flask请求管道
请求管道,登录前的验证,否则重定向到登录页面. # coding: utf8 from flask import render_template, request, g, session, redir ...
- mylistview 中item的子项的布局文件xml
@Override public View getView(final int position, View view, ViewGroup parent) { System.out.println( ...
- asp.net gridview动态添加列,并获取其数据;
1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...
- 影响性能的关键部分-ceph的osd journal写
在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...
- Linux:删除程序
首先查看程序是否安装,以mariadb 为例 卸载程序 .........