Welcome 微信登录

首页 / 软件开发 / C++

C++的EXIT与析构函数

C++的EXIT与析构函数

C++的EXIT与析构函数2008-01-05几乎在每本课本中几乎都是这样写的,当一个类实例化以后,必将执行构造函数,那么在该类被释放的时候,必将执行析构函数。似乎在人们的印象里,构造函数与析构函数如同一对双胞胎一样,执行完构造函数,必将会执行析构函数......今天我做了个实验,彻底的推翻了这个理论。代码如下:#include "stdafx.h"using namespace std;class mycs{ public: myc...
C++箴言:绝不重定义继承的非虚拟函数

C++箴言:绝不重定义继承的非虚拟函数

C++箴言:绝不重定义继承的非虚拟函数2008-01-05假设我告诉你 class(类)D 从 class(类)B publicly derived(公有继承),而且在 class(类)B 中定义了一个 public member function(公有成员函数)mf。mf 的参数和返回值类型是无关紧要的,所以我们就假设它们都是 void。换句话说,我的意思是:class B { public: void mf(); ...};class D: pub...
C++对象布局及多态实现之带虚函数的类

C++对象布局及多态实现之带虚函数的类

C++对象布局及多态实现之带虚函数的类2008-01-05如果类中存在虚函数时,情况会怎样呢?我们知道当一个类中有虚函数时,编译器会为该类产生一个虚函数表,并在它的每一个对象中插入一个指向该虚函数表的指针,通常这个指针是插在对象的起始位置。所谓的虚函数表实际就是一个指针数组,其中的指针指向真正的函数起始地址。我们来验证一下,定义一个无成员变量的类C040,内含一个虚函数。struct C040{ virtual void foo() {}};运行如下代码打...
C++箴言:谨慎使用私有继承

C++箴言:谨慎使用私有继承

C++箴言:谨慎使用私有继承2008-01-05在《C++箴言:确保公开继承模拟“is-a”》一文中论述了 C++ 将 public inheritance(公有继承)视为一个 is-a 关系。当给定一个 hierarchy(继承体系),其中有一个 class Student 从一个 class Person 公有继承,当为一个函数调用的成功而有必要时,需要将 Students 隐式转型为 Persons,它通过向编译器展示来做到这...
C++对象布局及多态实现之成员函数的调用

C++对象布局及多态实现之成员函数的调用

C++对象布局及多态实现之成员函数的调用2008-01-05 vchelp 潘凯从这部分开始我们除了利用内存的信息打印来进行探索外,更多的会通过跟踪和观察编译器产生的汇编代码来理解编译器对这些语言特性的实现方式。汇编方面知识的讨论超出了本文的范围,我只对和我们讨论相关的汇编代码进行解析。理解本文要讨论的知识并不需要有很完整的汇编知识,但必须了解起码的概念。下面我们看看引入虚继承后的影响。为了有所对比我们首先看看普通成员函数的调用情况。执行如下代码,它包括了...
C++箴言:谨慎使用多继承

C++箴言:谨慎使用多继承

C++箴言:谨慎使用多继承2008-01-05触及 multiple inheritance (MI)(多继承)的时候,C++ 社区就会鲜明地分裂为两个基本的阵营。一个阵营认为如果 single inheritance (SI)(单继承)是有好处的,multiple inheritance(多继承)一定更有好处。另一个阵营认为 single inheritance(单继承)有好处,但是多继承引起的麻烦使它得不偿失。在本文中,我们的主要目的是理解在 MI 问...
C++程序设计从零开始之语句

C++程序设计从零开始之语句

C++程序设计从零开始之语句2008-01-05前面已经说过程序就是方法的描述,而方法的描述无外乎就是动作加动作的宾语,而这里的动作在C++中就是通过语句来表现的,而动作的宾语,也就是能够被操作的资源,但非常可惜地C++语言本身只支持一种资源——内存。由于电脑实际可以操作不止内存这一种资源,导致C++语言实际并不能作为底层硬件程序的编写语言(即使是C语言也不能),不过各编译器厂商都提供了自己的嵌入式汇编语句功能(也可能没提供或提供其...
C++对象布局及多态探索之菱形结构虚继承

C++对象布局及多态探索之菱形结构虚继承

C++对象布局及多态探索之菱形结构虚继承2008-01-05 VCHELP 潘凯这次我们看看菱形结构的虚继承。虚继承的引入本就是为了解决复杂结构的继承体系问题。上一篇我们在讨论虚继承时用的是一个简单的继承结构,只是为了打个铺垫。我们先看看这几个类,这是一个典型的菱形继承结构。C100和C101通过虚继承共享同一个父类C041。C110则从C100和C101多重继承而来。struct C041{ C041() : c_(0x01) {} virtual vo...
C++启蒙之控制结构

C++启蒙之控制结构

C++启蒙之控制结构2008-01-05 天极 陶刚语句是按次序执行的:同一个函数中第一个语句首先执行,接着执行第二个……当然,少数的程序--包括我们需要编写的解决书店问题的程序--可以只使用一个次序执行。作为代替,编程语言提供了多种控制结构,允许更加复杂的执行路径。这一部分将简单地介绍C++提供的一些控制结构。练习7:编译一个包含错误的嵌套注释的程序。练习8:指出下面哪些输出语句是合法的:std::cout << ...
More effective C++:审慎使用异常规格

More effective C++:审慎使用异常规格

More effective C++:审慎使用异常规格2008-01-05毫无疑问,异常规格是一个引人注目的特性。它使得代码更容易理解,因为它明确地描述了一个函数可以抛出什么样的异常。但是它不只是一个有趣的注释。编译器在编译时有时能够检测到异常规格的不一致。而且如果一个函数抛出一个不在异常规格范围里的异常,系统在运行时能够检测出这个错误,然后一个特殊函数unexpected将被自动地调用。异常规格既可以做为一个指导性文档同时也是异常使用的强制约束机制,它好...
Win32下两种用于C++的线程同步类(下)

Win32下两种用于C++的线程同步类(下)

Win32下两种用于C++的线程同步类(下)2008-01-05上一篇中我介绍了一种通过封闭Critical Section对象而方便的使用互斥锁的方式,文中所有的例子是两个线程对同一数据一读一写,因此需要让它们在这里互斥,不能同时访问。而在实际情况中可能会有更复杂的情况出现,就是多个线程访问同一数据,一部分是读,一部分是写。我们知道只有读-写或写-写同时进行时可能会出现问题,而读-读则可以同时进行,因为它们不会对数据进行修改,所以也有必要在C++中封装一...
Win32下两种用于C++的线程同步类(上)

Win32下两种用于C++的线程同步类(上)

Win32下两种用于C++的线程同步类(上)2008-01-05 博客园 Jerry Cat线程同步是多线程程序设计的核心内容,它的目的是正确处理多线程并发时的各种问题,例如线程的等待、多个线程访问同一数据时的互斥,防死锁等。Win32提供多种内核对象和手段用于线程同步,如互斥量、信号量、事件、临界区等。所不同的是,互斥量、信号量、事件都是Windows的内核对象,当程序对这些对象进行控制时会自动转换到核心态,而临界区本身不是内核对象,它是工作在用户态的。...
C++启蒙之注释符号

C++启蒙之注释符号

C++启蒙之注释符号2008-01-05 天极 陶刚在我们的程序变得更复杂之前,我们先看看C++是如何处理注释的。注释可以帮助人们阅读程序。在典型情况下,它们用于总结算法、表明变量的目的或澄清其它一些模糊的代码片段。注释不会增加可执行程序的大小。编译器会忽略所有注释。在C++中有两种类型的注释:单行注释和成对注释。单行注释以双斜线(//)开头。同一行中斜线右侧的所有内容都是注释,会被编译器略过。另一个分隔符是注释符号对(/* */),它继承自C语言。这种注...
<< 171 172 173 174 175 176 177 178 179 180 >>