继承机制中的构造器和析构器 - C++快速入门17
继承机制中的构造器和析构器
让编程改变世界
Change the world by program
继承机制中的构造器和析构器
正如此前所讲解的,C++ 支持程序员自己写出将创建或销毁一个对象时自动调用的方法,也就是构造器和析构器。 在没有继承机制的情况下,我们很容易理解这些方法在创建或销毁一个对象的时候被调用。但是一旦使用了继承机制,构造器和析构器就变得有点复杂了。 比如基类有个构造器,如Animal(),它将在创造 Pig 类型的对象时最先被调用,如果 Pig 类也有一个构造器,它将排在第二个被调用。 因为基类必须在子类之前初始化原则! 然后我们继续讨论:如果构造器带着输入参数,事情变得稍微复杂了。 class Animal { public:
Animal( std::string theName );
std::string name;
} class Pig : public Animal { public:
Pig( std::string theName );
}
那么我们的方法应该如何定义呢?
不卖关子误导大家(小甲鱼发现,有时候跟大家说不能这样,要这样,但是大家却常把”不能这样”当”要这样”写了),应该如此定义: Animal::Animal( std::string theName ) {
name = theName;
} Pig::Pig( std::string theName ) : Animal( theName ) { } 注意在子类的构造器定义里的”:Animal(theName)”语法含义是: 当调用 Pig() 构造器时(以 theName 作为输入参数),Animal()构造器也将被调用( theName 输入参数将传递给它)。 于是,当我们调用 Pig pig(“小猪猪”); 将把字符串 “小猪猪” 传递给 Pig() 和 Animal(),赋值动作将实际发生在 Animal() 方法里。 实践:test2(源代码下载) 在销毁某个对象时,基类的析构器也将被自动调用,但这些事情编译器会自动替你处理。 因为析构器不需要输入参数,所以根本用不着使用 :SuperClassMethod(arguments) 语法! 与构造器的情况相反,基类的析构器将在子类的最后一条语句执行完毕后才被调用。 为了让大家对上面介绍的执行流程有比较直观的印象,我们来编写一个小程序:example(源代码下载)
新手需要注意的地方
初学者常犯的一种错误是用一个毫不相干的类去派生另一个毫不相干的子类。 例如就有人在 Human 类里有一个 swim() 方法,当这哥们在设计一条鱼的时候,就用 Human 去派生一个 Fish 类。 从技术角度讲,这麽做没有问题,但像这样的运用继承机制实在太牵强附会了。。。 作为一条基本原则,基类和子类之间的关系应该自然和清晰! 题外话:图像小甲鱼发觉上帝也懂编程,创造出”美人鱼” 就是这么个意外导致的。。。。。。 关于构造器的设计要越简明越好!我们应该只用它来初始化各种有关的属性。 作为一个基本原则,在设计、定义和使用一个类的时候,应该让它的每个组成部分简单到不能再简单! 最后一点别忘了,析构器的基本用途是对前面所做的事情进行清理。尤其是在使用了动态内存的程序里,析构器将至关重要! [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?fYBz6fM']视频下载[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LKUCHACFHHQW']备胎下载[/Downlink]
转载于:https://www.cnblogs.com/LoveFishC/archive/2012/03/14/3847162.html
继承机制中的构造器和析构器 - C++快速入门17相关推荐
- 构造器和析构器 - C++快速入门15
构造器和析构器 让编程改变世界 Change the world by program 定义构造器 回顾:之前我们讨论了使用面向对象的编程技术开发程序最基本步骤: 定义一个有属性和方法的类(模板) 为 ...
- 多继承中构造器和析构器的调用顺序
多继承中构造器和析构器的调用顺序: 构造器的调用顺序就像盖房子,从最基层开始: 析构器的调用顺序就像拆房子,从最顶层开始:
- C#锐利体验-第五讲 构造器与析构器(转)
第五讲 构造器与析构器 南京邮电学院 李建忠(cornyfield@263.net) 索引 C#锐利体验 "Hello,World!"程序 C#语言基础介绍 Mic ...
- 在java继承机制中 父类中的私有_Java中子类能继承父类的私有属性吗?
前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的.当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法.老师给我的解释是这样的--先 ...
- java查找一个数等于一组数中哪些数字相加的和_快速入门二分查找
二分查找 使用二分查找的前提 模板 常见的二分查找应用比如猜数字游戏. // 二分查找适用于有序的数组 // 这个一个最简单的二分查找算法,前提是数组中不存在重复元素 function binaryS ...
- 【学习编程】献给迷茫中的你,教你如何快速入门编程,如何从编程小百到 IT 巨佬?零基础自学请收下这份学习指南(经验分享)
导语 编程初学者可能都思考过这个问题: "我该怎么学编程?我要选择哪门编程语言比较适合我呢?......" 今天小编教大家认识编程语言,了解编程语言. 我们已经迈进了崭新的2023 ...
- Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)
Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项 ...
- latex大括号 多行公式_如何快速入门 LaTeX,在 XMind 2020 中轻松输入方程。
数学方程输入对于很多理工科朋友来说是一件让人头疼的事情.不仅是数学方程本身就纷繁复杂花样百出,各种输入语法更是劝退无数人. 然而很多看似复杂的东西其实并非如想象中的难,抓住本质即可快速入门.今天和大家 ...
- C++继承机制(二)——继承中的构造和析构顺序、继承同名成员的处理方式
目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...
最新文章
- linux下查看网卡型号
- [POJ3261] Milk Patterns
- 利用文件锁控制程序的执行
- jquery操作dom
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
- IIS部署时提示:InvalidOperationException:未能映射路径“/”
- 判断CPU是大端还是小端
- 服务器系统的功能,服务器操作系统有什么功能
- DIY购车入门5步法则
- 【VS开发】COM组件技术概述
- 硬核干货:你从普通码农到架构师的封神之路
- [2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)
- GreenDao的学习和使用
- 智能监狱管理系统APP软件开发
- 如何同时分析顺心捷达多个已签收单号的物流信息
- 简单 申请 msn.com邮箱 @
- linux打开txt文件命令_Linux文件操作,这些命令可以搞定
- Zabbix实现短信报警设置(实战)
- Matlab求一阶导数
- 如何开发app软件?程序员揭秘你还没听过的1种方法
热门文章
- mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化
- spring中的bean创建
- PHP-Zend引擎剖析之Hello World(二)
- 题目1255:骰子点数概率(动态规划)
- C 语言Hello world
- IGMP Internet组管理协议 未完
- 解决Failed to load class org.slf4j.impl.StaticLoggerBinder
- linux redhat 下命令行全部乱码解决
- 怎么教计算机应用基础,怎样教好《计算机应用基础》课
- java instanceof用法_Java基础高频面试题汇总(1.4W字详细解析)