基础入门:类的构造函数
构造函数 a. 构造函数名必须与类名相同,不得声明返回类型; b. 可以用行参形式为成员赋初值,可以重载; c. 返回一个不能传递的指向其定义对象首地址的指针; d. 不带任何参数的称为缺省构造函数; e. 有个特殊的初始化方式叫“初始化表达式表”(简称初始化表)。初始化表位于函数参数表之后、函数体{}之前,规则: ①若有继承,派生类必须在初始化表里调用基类的构造函数; class B:public A {…}; B::B(int x,int y):A(x) {}; ②类的const常量只能在初始化表里...
深度探索C++对象模型第七章
站在对象模型的尖端 7.1 Template Template的“具现”行为 (template instantiation) 编译器看到template的声明,并不做任何的事情,只有等到template instantiation的时候, 定义出一个template class object 或者 template class refrence(引用必须初始化),才会相应的准备template class 内部的数据排放等等,此时在template class 内部声明的static data mem...
深度探索C++对象模型第五章
构造、解构、拷贝语义学 5.继承体系下的对象构造 一般而言编译器所做的扩充操作大约如下: 1、记录在initializataion list 中的data members 初始化裁做会被放进 constructor的函数本身,并以members 的声明顺序为顺序。 2、如果有一个member 没出现在member initialization list 之中,但是他又一个default constructor ,那么该default constructor 必须被调用。 3、在这之前呢,如果class...
深度探索C++对象模型第三章
Data语意学 C++ standard 不强制规定“base class sunjects的排列次序”“不同存取层记得data members的排列次序” ,也不规定“virtual funcitons 和 virtual base class...
初学者学习C++的50条忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; 5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;...
基础入门:小结主要排序算法
1.插入排序-O(N2) 插入排序由N-1趟排序组成。对于P=1趟和P=N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。 typedef int ElementType; void Swap( ElementType *Lhs, ElementType *Rhs ) { ElementType Tmp = *Lhs; *Lhs = *Rhs; *Rhs = Tmp; } /* 插入排序 */ void InsertionSort( ElementType A[ ], int N ) { in...
C++处理for循环作用域规则
在 C++ 标准制定之前,在 for 循环中声明的变量在循环外也可以访问。例如: for (int n=0; n〈MAX; ++n) { //..do something } ++n; //OK in pre-standard C++; illegal in ISO C++ 然而,在 ISO C++ 中,for 循环变量的作用域被限制为循环本身。虽然这一改变不可否认地具有其意义,但是它却影响到了老代码以及新代码。下面我将示范一些迁移技术帮助你处理这一改动。 遗留代码 对于那些使用标准制定之前的作用域规则...
编程技巧:调用C++复制构造函数
1. 何时调用复制构造函数 复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中,而不是常规的赋值过程中。类的复制构造函数原型通常如下: class_name(const class_name); 它接受一个指向类对象的常量引用作为参数。例如,String类的复制构造函数的原型如下: String(const String); 新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用。这在很多情况下都可能发生,最常见的情况是将新对象显示地初始化为现有的对象。例如,假设mo...
学习C++必须掌握的概念
一、指针的概念 charstr[]=“ABCDEFG”; char*pc=str;//pc是指向stringstr的指针 shortx=33; short*px=x;//px是指向shortx的指针 cout*pcendl;//这条语句将打印字符‘A’ pc+=4;//指针向右移动4指向第5个字符 cout*pcendl;//这时这条语句将打印字符‘E’ pc--;//向左移动指针 cout*pcendl;//这时这条语句将打印字符‘D’ cout*px+3endl;//这条语句打印36因为=33+3...
C语言程序设计入门学习六步曲
说明:在使用本方法之前要先阅读C语言的相关内容,要初步掌握相关知识的要点,然后按下述方法学习,可以达到理解、巩固、提高C语言知识和提高程序调式能力的目的。 在程序开发的过程中,上机调试程序是一个不可缺少的重要环节。“三分编程七分调试”,说明程序调试的工作量要比编程大得多。这里以如何上机调试C程序来说明C语言的学习方法。 第一步、验证性练习 在这一步要求按照教材上的程序实例进行原样输入,运行一下程序是否正确。在这一步基本掌握C语言编程软件的使用方法(包括新建、打开、保存、关闭C程序,熟练地输入、编辑C程序...
实例编程:C++实现文件更改提示
代码如下: #include stdio.h #include signal.h #include errno.h /*static volatile atomic variable*/ static volatile sig_atomic_t sigflag = 0; /*private signal control handler*/ static void TurnFlag(int no){ sigflag = (sigflag == 0) ? 1 : 0; } /** * set signal...
产生不重复序列的范围随机数
#includestdlib.h #includetime.h #includeiostream.h void main() { srand( (unsigned)time( NULL ) ); //以系统时间作种子,就不会每次都产生一样的序列了 double temp=double(rand()%4000+3000)/10000.0; //调节精度 temp=temp0.5?(temp-0.2):(temp+0.2);...