/*向上类型转换和拷贝构造函数拷贝构造函数拷贝构造函数
如果允许便以其为派生类生成拷贝构造函数,
它将首先自动调用基类的拷贝构造函数,
然后再是各成员对象的拷贝构造函数
*/
#include <iostream>
using namespace std;

class Parent{
int i;
public:
Parent(int ii):i(ii){
cout << "Parent(int ii)\n";
}
Parent(const Parent& b):i(b.i){
cout << "Parent(const Parent&)\n";
}
Parent():i(0){cout << "Parent()\n";}
friend ostream& operator<<(ostream& os,const Parent& b){
return os << "Parent: " << b.i << endl;
}
};

class Member{
int i;
public:
Member(int ii):i(ii){
cout << "Member(int ii)\n";
}
Member(const Member& m):i(m.i){
cout << "Member(const Member&)\n";
}
friend ostream& operator<<(ostream& os,const Member& m){
return os << "Member: " << m.i << endl;
}
};
class Child:public Parent{
int i;
Member m;
public:
Child(int ii):Parent(ii),i(ii),m(ii){
cout << "Child(int ii)\n";
}
Child(const Child& c):Parent(c),i(c.i),m(c.m){//无论何时我们在创建自己的拷贝构造函数时,都要正确地调用基类拷贝构造函数
cout << "Child(Child&)\n";
}
friend ostream& operator<<(ostream& os,const Child& c){
return os << (Parent&)c << c.m
<< "Child: " << c.i << endl;
}
};

int main(){
Child c(2);
cout << "calling copy-constructor: " << endl;
Child c2 = c;
cout << "Values in c2:\n" << c2;
return 0;
}

转载于:https://www.cnblogs.com/phoenixzq/archive/2010/11/17/1880128.html

向上类型转换和拷贝构造函数相关推荐

  1. C++ Primer 5th笔记(chap 13 拷贝控制)拷贝构造函数

    1. 拷贝构造函数 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数. class Foo{public:Foo();//默认构造函数 (仅在程序员 ...

  2. c/c++拷贝构造函数和关键字explicit

    c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象:不加就可以隐式初始化对象: 下面的代码是可以正常编译执行的,但 ...

  3. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

    构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...

  4. 理解C++中拷贝构造函数

    拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同样对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象的时候系统会自动调用它:其形参是本类对象的引用,它的特殊功能是将参数 ...

  5. 面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态

    文章目录 一. 什么是右值引用,跟左值又有什么区别? 二. 面向对象的三大特征 三. c++中四种cast转换 四.拷贝构造函数和赋值运算符的认识 五. 对虚函数和多态的理解 一. 什么是右值引用,跟 ...

  6. 复制构造函数java_Java中的拷贝构造函数

    1.介绍 Java 中的拷贝构造方法是一种使用该类的一个对象构造另外一个对象的构造方法. 当需要拷贝一个带有多个成员变量的复杂对象或者想构造已存在对象的深拷贝对象时非常有用. 译者注:本文内容很简单, ...

  7. 备忘录_C++_拷贝构造函数

    脚踏实地,仰望星空 目录视图 摘要视图 订阅 程序员必须要学会算法吗     博客专家庄晓立:我为什么要选择Rust?     从零练就iOS高手实战班震撼来袭     新型数据库利弊谈     C+ ...

  8. C++学习笔记day47-----C++98-继承中的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,多重继承,虚继承

    继承中的构造函数 当通过一个子类创建一个新的对象时,编译器会根据子类在初始化表中指明的基类的初始化方式去调用基类相应的构造函数.如果子类的初始化表中,并没有指明基类的初始化方式,编译器将会调用基类的无 ...

  9. C++拷贝构造函数与拷贝赋值运算符

    拷贝构造函数 拷贝构造函数定义了当用同类型的另一个对象初始化新对象时做什么,如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数的参数类型 ...

最新文章

  1. CQRS体系结构模式实践案例:Tiny Library:领域仓储与事件存储
  2. Cacti Weathermap 高级用法 (二)
  3. 怎么解决tomcat占用8080端口问题图文教程
  4. 【Python】集合的交、并、补、差集怎么算?
  5. C# 网络编程之豆瓣OAuth2.0认证详解和遇到的各种问题及解决
  6. android 根据文件Uri获取图片url
  7. 使用Qt正则表达式提取全路径的文件名
  8. php创建windos用户,window_Win7系统创建及开启隐藏账户图文教程,  在电脑操作中有时候因为 - phpStudy...
  9. centos6中三台物理机配置nginx+keepalived+lvs
  10. jeecg <t:choose 功能标签用法修改 处理选择0条记录回写
  11. android查看cpu型号_笔记本电脑cpu处理器怎么看?
  12. sap不用oracle数据库库,SAP系统安装之Oracle 10g数据库(Win3264)
  13. 分布式技术(6) 后端接口设计方案
  14. linux完美卸载编译的php,完美卸载linuxoracle的方法
  15. 修改Git提交历史中的author,email和name等信息
  16. 交通肇事逃逸会受到什么处罚
  17. uniapp 实现拨打电话
  18. JAVA社交平台项目第四天 消息通知系统
  19. 解封了 开始寻找牛人
  20. shiro手机无状态登录访问和电脑端登录访问两种方式处理

热门文章

  1. 龙书啃不动?老司机带你从零入门编译原理,开发编译器
  2. 45 个常用Linux 命令,让你轻松玩转Linux!
  3. MySQL高级 - SQL优化 - limit优化
  4. 如何理解Minor/Major/Full GC
  5. 分布式架构的水平和垂直扩容
  6. 数据验证和JSR303
  7. 模版设计模式概述和使用
  8. 循环结构_do-while循环
  9. 数据库-优化-数据库结构的优化-表范式化优化
  10. 封装案例-创建士兵类-完成初始化方法