博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承机制中的构造器和析构器 - C++快速入门17
阅读量:5775 次
发布时间:2019-06-18

本文共 1594 字,大约阅读时间需要 5 分钟。

继承机制中的构造器和析构器

 

让编程改变世界

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/3846183.html

你可能感兴趣的文章
html5视频标签
查看>>
三元表达式之理解/jquery源代码分析之$.inArray实现
查看>>
STM32 mdk软件仿真时过不去时钟的问题
查看>>
Spark Streaming概念学习系列之Spark Streaming容错
查看>>
单例模式
查看>>
老旧的金融机构,是时候赶赶云计算的时髦了
查看>>
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
Python version 2.7 required, which was not foun...
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>
Java enum用法详解
查看>>
去云端的多条途径
查看>>
Docker容器从一知半解到入门
查看>>
关于“方法参数”
查看>>
Redis命令总结
查看>>
unable to write 'random state'错误解决
查看>>