C++语言基础(1)

1.入门简介     变量 C++数据类型 C++操作符 C++中的函数 main函数 数组 字符串数组 字符串操作函数 C++是个强大的语言,可以用于做别的语言做不了的工作。但是,这种强大功能是有代价的。开始使用C++时,你可能会遇到内存溢出和访问失效等问题,使程序死机。这里用最简短的篇幅介绍C++语言基础。C++语言本身有专著介绍,这种书还特别厚,所以别指望我能用三言两语说清楚。读者学完本书并使用C++ Builder一般时间之后,最后对C++语言再作更深入的了解。 C++可以最充分地利用面向对象编程(OOP)的优势。OOP不只是一个新名词,而有它的实际意义,可以生成可复用的对...
2009-03-09 09:50 | 阅读 2941 次 | 评论 0 条

C++语言基础(2)

if语句 if语句用于测试条件并在条件为真时执行一桌或几条语句。 说明:if表达式后面不能带分号,否则它本身表示代码中的空语句,使编译器将空语句解释为在条件为真时执行的语句。 if (x == 10); // Warning! Extra semicolon! DoSomething(x); 这里DoSomething()函数总会执行,因为编译器不把它看成在条件为真时执行的第一条语句。由于这个代码完全合法(但无用),所以编译器无法发出警告。 假设要在条件为真时执行多行语句,则要将这些语句放在大括号内: if (x > 10) { cout << "The number is grea...
2009-03-09 09:50 | 阅读 2382 次 | 评论 0 条

给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.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;   6.会用Visual C++,并不说明你...
2009-03-09 09:39 | 阅读 1910 次 | 评论 0 条

const &amp; 指针

在指针的定义里面加入const,究竟const修饰的是指针本身,还是指针所指向的变量那,下面来分析一下:  1)、const在前面   const int nValue; //nValue是const   const char *pContent; //*pContent是const, pContent可变   const (char *) pContent;//pContent是const,*pContent可变   char* const pContent; //pContent是const,*pContent可变   const char* const pConten...
2009-03-09 09:37 | 阅读 1076 次 | 评论 0 条

C++中用vectors改进内存的再分配

摘要:本文描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。本文将讨论如何使用 STL 的 vector 进行内存的再分配。   这里描述的是一种很常见的情况:当你在某个缓存中存储数据时,常常需要在运行时调整该缓存的大小,以便能容纳更多的数据。传统的内存再分配技术非常繁琐,而且容易出错:在 C 语言中,一般都是每次在需要扩充缓存的时候调用 realloc()。在 C++ 中情况更糟,你甚至无法在函数中为 new 操作分配的数组重新申请内存。你不仅要自己做分配处理,而且还必须把原来缓存中的数据拷贝到新的目的缓存,然后释放先前数组...
2009-03-09 09:35 | 阅读 1091 次 | 评论 0 条

析构函数的奥秘

class A {public:A () { pValue = new int[100]; printf("Constructor of A\n"); }~A () { delete [] pValue; printf("Deconstructor of A\n"); }private:int * pValue;}; class B {public:~B () { printf("Deconstructor of B\n"); }}; class C : public B {public:~C () { printf("Deconstructor of C\n"); }privat...
2009-03-09 09:35 | 阅读 1260 次 | 评论 0 条

堆、栈及静态数据区详解

五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存储区,全局变量和静态变量...
2009-03-09 09:21 | 阅读 2776 次 | 评论 0 条

浅谈内存泄漏

对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考在C++中也加入GC的支持。现实世界就是这样的,作为一个c/c++程序员,内存泄漏是你心中永远的痛。不过好在现在有许多工具能够帮助我们验证...
2009-03-09 09:20 | 阅读 2059 次 | 评论 0 条

C++成员函数的重载、覆盖与隐藏

成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。 覆盖:派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。 函数Base::f(int)与Base::f(float)相互重载,而Base::g(void)被Derived::g(void)覆盖。#include <iostream.h>class Base{public:void f(int x){ cout << "Base::f(int) " ...
2009-03-09 09:05 | 阅读 1670 次 | 评论 0 条

C++构造函数调用顺序

C++构造函数调用顺序: 1.虚基类的构造函数;虚基类构造函数如果有多个,虚基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);基类构造函数如果有多个,基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 3、如果类里面有成员类,成员类的构造函数优先被调用;成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序; 4、派生类构造函数 作为一般规则派生类构造函数应该不能直接向一个...
2009-03-09 09:05 | 阅读 1420 次 | 评论 0 条

C++藏书阁

选择现在来推荐C++图书,看似蹊跷,实则是有原因的。我们的专栏去年初从Java图书开始,一年多的时间里始终对C++触及甚少。C++程序员出身的我,已经受到了不少好友和读者的质疑。去年是C++诞生20周年(从1985年第一个商业实现的发布算起),世界各地包括国内都举行了不少活动,当时本来已经动笔写了一个初稿,也想来 个献礼,但是稿成之后,看看又不满意,加之俗务缠身,就放了下来。这一拖,又是小半年。   终于促使我“重续前缘”的是今年以来发生的两件事。一是国内又一轮C++好书扎堆儿出版,增加了本文的必要性,否则,荣耀先生在2004年所写的《C++程序设计之四书五经》(上...
2009-03-09 09:02 | 阅读 1126 次 | 评论 0 条

C++成长篇

秘笈 作者 初入江湖——惨不忍睹 C++程序设计教程- 或 -C++语言程序设计(第二版) 钱能郑莉 董渊   小有名气——将就着用 Thinking in C++ 2nd edition Bruce Eckel   名动一方——在大是大非的问题上立场坚定 Effective C++(第二版) 和 More Effective C++ Scott Meyers (Lostmouse、候捷 等 译)   天下闻名——正确的使用C++的每个特性 C++程序设计语言——特别版- 和 -ANSI/ISO C+...
2009-03-09 09:00 | 阅读 967 次 | 评论 0 条

c++ volatile用法

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3) 多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到v...
2009-03-09 08:59 | 阅读 1653 次 | 评论 0 条

C++关键字

关键字是预先保留的标识符,每个关键字都有特殊的含义。我们不能在程序中使用与关键字同名的标识符。以下是C++所保留的关键字 asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float for frien...
2009-03-09 08:58 | 阅读 1160 次 | 评论 0 条

虚函数表

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的...
2009-03-09 08:54 | 阅读 1137 次 | 评论 0 条
浏览195347次