派生类的构造过程

1、先基类、后对象、再子类 多继承,初始化顺序跟基类的声明顺序有关,从左到右。 对象 ,与声明类的顺序有关,从上到下。 2、若基类的构造器是默认构造器,就可以不显示的调用,如果没有的话,必须显示调用 此规则同样适用于类中的对象。 3、派生类的析构顺序,与构造顺序相反。 先子类、后对象、再基类。正好符合压栈与出栈...

智能指针入门 auto_ptr

所谓智能指针,就是可以随便申请而无需管理自动释放,就像 java 或 C# 的垃圾回收机制一样。我们无需关心销毁只管尽情的申请,系统提供了一个 auto_ptr 类可以使用这样的功能。后面我们也会用简单的代码示例介绍 auto_ptr 内部是如何实现的。代码如下: #include #include usin...

内存操作符重载(new/delete)

内存操作符 new 和 delete 系统本身就提供了非常稳固的方法,很少会有情况用到自己重载的 new 和 delete,除非是想实现什么特别的功能,比如在申请内存后自动填入什么数据等等,当然这并不是本文讨论的重点,本文的重点是记录如何重载这两个操作符。 #include #include #include ...

类之间的类型转换 explicit 使用

使用一个不同的类初始化另外一个类,这种情况是要经过类型转换才能完成的,否则语法上就无法通过。同样,类的类型转化也分隐式转换和显式转换。以下代码介绍了隐式转换和显式转换的两种方法。以及 explicit 关键字的使用。 #include using namespace std; class Point2D{pu...

运算符重载使用它类对象作为参数

我们想实现一个功能,分别有两个类,一个名为 Sender,负责发送邮件。另外一个类名为 Mail,负责管理发送的标题和内容。在使用的时候,我们需要让类 Sender 重载 << 操作符,以实现将 Mail 类的数据发送出去,大致用法就是 Sender << Mail 这样的方式。这就涉及到...

仿函数实现

仿函数就是可以让类像函数一样使用,因为类的构造函数是不能有返回值的,所以如果你希望调用一个类的对象名+()而有返回值,那就必须要重载()。这样以实现仿函数的功能。实现的代码如下: #include using namespace std; // 自实现求平方类,做成仿函数方式使用class...

运算符重载流输入输出<< >>

流输入输出运算符 >> << 比较简单,C++提供了固定的格式,语法上并不是非常难,你只需要记住 istream 和 ostream 这两个类就可以了。本文使用了友元函数方式来实现。具体实现的代码如下,请注意看返回 istream 和 ostream 引用的原因是为了可以使用连续的>...

取消红蜘蛛窗口置顶

红蜘蛛是我们上课时使用的屏幕广播软件,它的窗口会遮挡住所有的其他窗口,在听课的时候我们无法在一个屏幕内很方便的跟着老师一起写代码或者看文档。除非你拖动一下窗口的位置,但这样我们又无法查看整个广播的屏幕了。 解决这个问题有两个办法,一个是在窗口中间点击右键,会弹出一个菜单,点击第一个“显示工具栏”,随后再右键点击...

运算符重载前++与后++

无论前++还是后++,操作数都只有一个,这样我们做运算符重载的时候,该如何区分呢?这里就要接受一个新的知识,就是亚元。在C++ Primer一书中是这样描述的(中文版 第五版 503 页)“为了解决这个问题,后置版本接受一个额外的(不被使用)int类型的形参。当我们使用后置运算符时,编译器为这个形参提供一个值为0...

运算符重载 - (负号)操作符

本文介绍重载符号操作符 -,他与减号操作符是一样的,那我们该如何区分开呢?其实符号操作符属于单目运算符,操作数只有一个。而减号操作符则是双目运算符,操作符需要两个才可以,这样我们在重载的时候,只要将控制了操作数,系统就知道我们到底是在重载哪个操作符了。 符号操作符重载问题比较多,特别是代码中返回值用 const...