浅谈C++函数的参数
函数参数的求值顺序
当一个函数带有多个参数时,C++语言没有规定在函数调用时实参的求值顺序。而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。有的编译器规定自左至右,有的编译器规定自右至左,这种对求值顺序的不同规定,对一般参数来讲没有影响。但是,如果实参表达式中带有副作用的运算符时,就有可能产生 ...
TFileStream
TFileStream类使得应用程序可以从磁盘的文件中读取数据。
类关系 TObject->TStream->THandleStream
使用TFileStream类可以访问磁盘文件的信息。该类将打开一个全程的文件,并提供方法来读取该文件。如果应用程序中已经定义了该文件的句柄,可以使用THandleStream对象以同样的模式打开该文件。
方法列表
~TFilStream 删除TFi ...
C/C++中利用空指针简化代码提高效率
这里的写法,可以避免使用 for 循环,减少栈空间内存的使用和减少运行时的计算开销!
#include
#include
using namespace std;
void print_char(char* array[]);//函数原形声明
void main(void)
{
char* test[]={"abc","cde","fgh",NULL};//这里添加一个NULL,表示不指向任何地址,值为0
print_char(test);
ci ...
C/C++中数组和指针类型的关系
对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识!
一个整数类型数组如下进行定义:
int a[]={1,2,3,4};
如果简单写成:
a;//数组的标识符名称
这将代表的是数组第一个元素的内存地址,a;就相当于&a[ ...
C++语言学习之从结构到类
编程之前,有必要复习一下C++中面向对象的一些基本概念。我们知道,C++与C相比有许多优点,主要体现在封装性(Encapsulation)、继承性(Inheritance)和多态性(Polymorphism)。封装性把数据与操作数据的函数组织在一起,不仅使程序结构更加紧凑,并且提高了类内部数据的安全性;继承性增加了软件的可扩充性及代码重用性;多态性 ...
深入浅出Win32多线程程序设计综合实例
本章我们将以工业控制和嵌入式系统中运用极为广泛的串口通信为例讲述多线程的典型应用。
而网络通信也是多线程应用最广泛的领域之一,所以本章的最后一节也将对多线程网络通信进行简短的描述。
1.串口通信
在工业控制系统中,工控机(一般都基于PC Windows平台)经常需要与单片机通过串口进行通信。因此,操作和使用PC的串 ...
More Effective C++之引用计数
Reference counting让我想起了Java,当如果想用C++来实现Java的能力的话,那Reference counting必不可少。Reference counting可以节省程序的运行成本,大量的构造、析构、分配、释放和拷贝的代价被省略。
实现
classRCObject
{
public:
RCObject():refCount(0),shareable(true){}
RCObject(constRCObject&):re ...
C++中的引用类型
引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。
引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为t ...
C++中的const限定修饰符
const修饰符可以把对象转变成常数对象,什么意思呢?
意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!
使用方法是:
const int a=1;//这里定义了一个int类型的const常数变量a;
但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!
我们 ...
C/C++中字符串常量的不相等性及字符串的Copy
#include
void main(void)
{
if("test"=="test")
{
cout
上面的代码我们测试两个内容为test的字符串常量是否相等,按照常理,应该是相等的,这些在一些过程式语言中会得到相等的结论,但在c/c++却不是这样。
为什么呢?
答案在这里:因为字符串常量存储在计算机内存中,两个字符串常量的地址均不相同,所 ...
C/C++中利用数组名/指针进行排序实例
在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。
以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。
#include
void main(void)
{
void reversal();
static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i
void main(void) ...
C++中利用构造函数与无名对象简化运算符重载函数
在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的:
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include
using namespace std;
class Test
{
public:
Test(int a)
{
Test::a = a;
...
使用C++的托管扩展针对Windows窗体编程
摘要:本文讨论了如何使用 Visual C++ .NET 的托管扩展针对 Windows 窗体编程,并提供了使用直接访问 Windows 窗体类的手动编程技术的示例,以及使用 Windows 窗体设计器的示例。此外,本文还对 Windows 窗体和 Microsoft 基础类 (MFC) 应用程序进行了比较。
简介
长期以来,程序员们都使用 C 和 C++ 来开发 Windows GUI 应 ...
Microsoft CryptoAPI加密技术(二)
上次我们讲了Microsoft CryptoAPI的构成以及会话密钥的使用。接下来我们将看一下公私密钥对的使用、HASH算法、数字签名等技术。
一、 公用密钥加密技术
公用密钥加密技术使用两个不同的密钥:公钥和私钥。私钥必须安全的保管好不能被外人知道,而公钥可以告诉任何人,只要他需要。通常公钥是以数字证书的形式发布的。
用公 ...
C++中类的继承特性
整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分。
可以说这一章节的内容是c++面向对象程序设计的关键。
下面我们简单的来说一下继承的概念,先看下图:
上图是一个抽象描述的特性继 ...
Linux系统共享库编程
一、说明
类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用。Windows中为*.dll,而Linux中为*.so。下面详细介绍如何创建、使用Linux的共享库。
二、创建共享库
在mytestso.c文件中,代码如下:
#include
#include
int GetMax(int a, int b)
{
if (a >= b)
return a;
retu ...
C++类的继承与多重继承的访问控制
在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论。
对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。
在这里我声明一下,对于此章节的内容不太适合用过多的文字进行描述,主要还 ...
用C++Builder实现Windows 2000的Messenger
本文讲述了如何用C++Builder实现Messenger的详细方法,其中使用了如下技术:
1. 多线程序技术,防止界面出现死锁。
2. 使用了网络枚举来枚举在线的网络用户。
3. 使用了Unicode的转换函数进从AnsiString到Unicode的转换。
4. 使用了简单的不规则窗口的技术。
5. 自动安装,将自己加入系统起动中。
6. 系统托盘技术。
编程方 ...
用SetupAPI结合注册表获取USB优盘序列号
//---------------------------------------------------------------------------
#include
#include
#include
#ifndef __BORLANDC__
#pragma comment(lib, "setupapi.lib")
#endif
//---------------------------------------------------------------------------
char g_strCrnVerify[] =
{
0xBB, 0xB6, 0xD3, 0 ...
C++Builder在WIN2000环境下编制Service
Windows 2000与Windows 9x有一个非常重要的区别,即Windows 2000提供了很多功能强大的Service(服务)。这些Service可以随着WIN2000的启动而自启动,也可以让用户通过控制面板启动,还可以被Win32应用程序起停。甚至在没有用户登录系统的情况下,这些Service也能执行。许多FTP、WWW服务器和数据库就是以Service的形式存在于WI ...