C++语言经典实践
文章平均质量分 65
C++经典实践。最基本但必需的C++语法实践,对实践过程中的正确,错误的用法,进行了注解。建议的办法是直接将代码copy在读者的开发环境中,进行调试学习。
liranke
似水流年是一个人所有的一切,只有这个东西,才真正归你所有。其余的一切,都是片刻的欢娱和不幸,转眼间就已跑到那似水流年里去了。
展开
-
C++ STL之vector(向量)的用法,可变数组
vector,即向量,可以认为是一种可变数组,即大小可以重新设置的数组类型。vector的特点是比普通数组更安全、更灵活。vector是C++标准库中提供的容器类模版之一。C++STL,全称是C++ Standard Library,即C++标准库。C++STL是类库和函数的集合,由c++标准委员会制定。原创 2015-06-26 11:29:00 · 1935 阅读 · 0 评论 -
JNI遇到error: request for member ‘FindClass‘ in something not a structure or union
本篇通过一个jni错误,来说明c/c++编译器在处理jni代码时,引用到JNIEnv时的注意事项。request for member 'FindClass' in something not a structure or union 问题解决。原创 2014-11-17 11:25:50 · 8604 阅读 · 0 评论 -
C++基础#26:C++中的局部类(local class)
类可以定义在某个函数的内部,这样的类被称为局部类(local class)。 注意,是定义而不是声明,这就意味着在函数内部声明这个类的同时就要进行实现,换句话说,局部类的所有数据成员和成员函数必须定义在类的内部。原创 2010-03-28 12:25:00 · 2991 阅读 · 0 评论 -
C++基础#25:C++中的嵌套类(内部类)和外部类
C++中,允许在一个类中定义另外一个类,在类中定义的类称为嵌套类(或内部类),定义嵌套类的类被称为外部类。对类嵌套往往为了帮助实现另一个类,并避免名称冲突。有了嵌套类,在使作用域规则更加规范的同时,又增强了类中信息局部化的能力。嵌套类是一个独立的类,和外层类基本没什么关系。原创 2010-03-28 11:39:00 · 4609 阅读 · 0 评论 -
C++基础#24:C++中的const_cast,数据类型转换
C++中的const_cast运算符用于修改类型的const或volatile属性,从而强制消除对象的常量性。使用const_cast去除const限定的目的并不是为了修改它的内容。变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。原创 2010-03-27 21:37:00 · 3179 阅读 · 0 评论 -
C++基础#23:C++中的reinterpret_cast,数据类型转换
C++还提供了reinterpret_cast用于任意类型的转换,即reinterpret_cast运算符允许将任意指针转换到其他指针类型,也允许做任意整数类型和任意指针类型之间的转换。转换时,执行的是逐个比特复制的操作。原创 2010-02-07 21:35:00 · 30541 阅读 · 3 评论 -
C++基础#22:C++中的静态强制static_cast
与dynamic_cast对应的是static_cast(静态强制)。static_cast关键字一般用来将枚举类型转换成整型,或者短整形转换成长整形,又或者整型转换成浮点型。也可以用来将指向父类的指针转换成指向子类的指针。static_cast可以用于类层次结构中基类和子类之间指针或引用的转换。static_cast仅仅是依靠类型转换语句中提供的信息(尖括号中的类型)来进行转换。原创 2010-02-06 21:37:00 · 13293 阅读 · 5 评论 -
C++基础#21:C++中的RTTI机制之typeid
RTTI,Runtime Type Information,即运行时类型信息,它提供了运行时确定对象类型的方法。通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型。c++通过下面两个操作符提供RTTI。(1)typeid:返回指针或引用所指对象的实际类型。(2)dynamic_cast:将基类类型的指针或引用安全的转换为派生类型的指针或引用。对于带虚函数的类,在运行时执行RTTI操作符,返回动态类型信息;对于其他类型,在编译时执行RTTI,返回静态类型信息。原创 2010-01-23 11:38:00 · 9433 阅读 · 2 评论 -
C++基础#20:C++中的动态强制dynamic_cast
C++中提供了动态强制(dynamic_cast),是一种运行时类型识别机制,可以从一个虚的基类强制到一个派生类。我们常常需要知道,在运行过程中,我们真正在使用的是哪个类的对象,这时,可以明确地使用dynamic_cast来得到运行时类型的信息。原创 2010-01-06 20:40:00 · 17021 阅读 · 2 评论 -
C++基础#19:C++中的结构体struct,以及与C语言中的struct的异同
C++语言被称为带类的C,很多语法语言规范都从C语言演变而来。其中就包括struct类型。C++中保留了C语言的struct关键字,但和C语言中的用法不完全一样。原创 2009-12-05 10:36:00 · 3569 阅读 · 0 评论 -
C++基础#18:构造函数和析构函数使用注意事项
在C++中,编译器自动会为一个类创建一个default构造函数、一个copy构造函数、一个赋值运算符函数(operator=),以及一个析构函数。本节主要看构造函数和析构函数在实际使用过程中的一些注意事项。原创 2009-12-05 10:04:00 · 4004 阅读 · 0 评论 -
C++基础#17:C++中的虚函数表
在C++中,虚函数被通过一张虚函数表(Virtual Table)来实现的,简称为V-Table,表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。在这个表中,描述了一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,它为我们指明了实际所应该调用的函数。原创 2009-11-12 08:14:00 · 3429 阅读 · 0 评论 -
C++基础#16:Java抽象类和C++虚基类的异同
java和C++都是面向对象编程语言,遵循面向对象的特性,继承,封装,多态。由于java的抽象类和C++虚基类很像,本篇对二者在这两个概念上进行一些比较。原创 2009-10-29 21:11:00 · 3130 阅读 · 0 评论 -
C++基础#1.2:类的定义-如何优雅的定义一个类
类是一种用户自定义的数据类型。(1)在类内不允许对所定义的数据成员进行初始化。(2)类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数组、指针和引用等。也可以是对象。即另一个类的对象,可以作为该类的成员。但是,自身类的对象是不可以的(A a是非法的),而自身类的引用是可以的(A *pa是合法的)。(3)在类的说明部分之后必须加分号“;”。原创 2009-10-01 08:16:00 · 3192 阅读 · 0 评论 -
C++基础#1.1:类和对象的介绍以及简单应用
C++是面向对象编程语言,而C语言是面向过程的编程语言C,C++兼容C。在面向对象编程语言中,一切皆对象。对象是类的一个实例。原创 2007-12-20 21:26:00 · 3100 阅读 · 1 评论 -
C++基础#2:static详细介绍-修饰函数,修饰变量,修饰类
1. static关键字的使用形式:static可以用作函数和变量的前缀,用以修饰变量,函数,数据成员,成员函数。(1)在C/C++中,修饰变量或函数:如,static int a; // 静态变量 static get_a(){ return a;} // 静态函数(2)在C++中,修饰数据成员或原创 2009-10-15 20:56:00 · 9147 阅读 · 0 评论 -
C++基础#3:const用法详细介绍
1. const数据成员的初始化:(1) 在对象层次上,常量几乎没有任何意义,因此const数据成员通常也是静态的,即用static const来修饰而不是const;(2) 正如static数据成员一样,satic const数据成员也必须在源文件中为其分配空间并进行初始化,也是最后一次对其赋值的机会。 另外,C++规定,如果数据成员是简单类型(如int,char.....),则允许程序员在声明原创 2009-10-17 21:51:00 · 3532 阅读 · 0 评论 -
C++基础#4:this指针的用法-何时显示引用与隐式引用
this指针的含义及其用法:1. this指针是一个隐含于每一个成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。 4. 在C++中,thi原创 2009-10-18 09:59:00 · 6051 阅读 · 0 评论 -
C++基础#5:构造函数,析构函数,拷贝构造函数和赋值函数
一. 构造函数1. 构造函数是一种用于创建对象的特殊成员函数,当创建对象时,系统自动调用构造函数。2. 构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型,连Void也不可以,它有隐含的返回值,该值由系统内部使用。3. 构造函数的作用是:为对象分配空间;对数据成员赋初值;请求其他资源。4. 如果一个类没有定义构造函数,编译器会自动生成一个无参原创 2009-10-21 23:11:00 · 7532 阅读 · 0 评论 -
C++基础#6:C++中的引用类型
引用(reference)是c++对c语言的重要扩充。一. 引用的概念引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。1. 引用就是为某个变量或隐含的临时变量起个别名,对别名的操作等同于对目标变量的操作;2. 引用本身不是变量,它是某个变量的别名,其本身不占存储空间。二. 引用的初始化:1. 定义引用时必须指出目标对象(即声明的同时进行初始化) ;原创 2009-10-22 23:19:00 · 2995 阅读 · 0 评论 -
C++基础#7:继承-单继承,多继承,虚基类
继承(inheritance)和派生(derived): 类提供了说明一组对象结构的机制。借助于继承这一重要机制,已存在的类具有建立子类的能力,进而建立类的层次,扩充类的定义。 继承提供了创建新类的一种方法,一个新类可以通过对已有类进行修改和扩充来定义。从一个类继承定义的新类,将继承已有类的方法和属性,并且可添加不包含在父类中的新方法和属性。新类被称为已有类的子类,又称为派生类原创 2009-10-23 22:02:00 · 2835 阅读 · 0 评论 -
C++基础#8:类层次中的类转换
一. 单基派生的情形:对于 class base { }; class derived: public base //public inheritance { };有以下赋值兼容规则可以遵循: 1. 派生类对象可以赋值给基类对象 但是,因为基类对象不具有派生类对象所具有的成员,因此基类对象不能赋值给派生类对象,强转也不行。 der原创 2009-10-27 07:37:00 · 4485 阅读 · 0 评论 -
C++基础#9:纯虚函数和抽象类的用法
纯虚函数和抽象类: 含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。 定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本身并没有意义.或者给出实现也没有意义 一. 纯虚函数在许多情况下,在基类中不能给出有意义的虚函数定义,这时可以把它说明成纯虚函数,把它的定义留给派生类来做。定义纯虚函数的一般形式为:c原创 2009-10-29 21:03:00 · 3545 阅读 · 0 评论 -
C++基础#10:友元的使用方法,友元函数和友元类,friend
友元函数和友元类: 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。 但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。 除了友元函数外,还有友元类,两者统称为友元。原创 2009-10-30 08:08:00 · 2769 阅读 · 0 评论 -
C++基础#11:C++经典书籍
C++经典书籍解读2009-03-10 18:28 C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计原创 2009-11-04 22:02:00 · 2961 阅读 · 0 评论 -
C++基础#12:多态性与虚函数,重载函数,纯虚函数
多态性概念:在面向对象的概念中,多态性是指不同对象接收到相同消息时,根据对象类的不同产生不同的动作。多态性提供了同一个接口可以用多种方法进行调用的机制,从而可以通过相同的接口访问不同的函数。具体地说,就是同一个函数名称,作用在不同的对象上将产生不同的操作。 多态性提供了把接口与实现分开的另一种方法,提高了代码的组织性和可读性,更重要的是提高了软件的可扩充性。一. 重载函数1. 在原创 2009-11-12 08:02:00 · 5654 阅读 · 2 评论 -
C++基础#13:模板在C++中的使用,Template
所谓模板是一种使用无类型参数来产生一系列函数或类的机制,是C++的一个重要特性。模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现方便了更大规模的软件开发。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。原创 2009-11-16 16:58:00 · 2770 阅读 · 0 评论 -
C++基础#14:运算符重载在C++中的实践
一. 概述: 1. 运算符重载的实质: 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参, 然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 2. 运算符重载的规则: (1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的这些运算符。原创 2009-12-03 20:57:00 · 5205 阅读 · 0 评论 -
C/C++基础#15:C++/C经典试题,高质量C++编程指南
C++/C试题的答案与评分标准(来自于林锐的>),全文请到本博资源中下载.一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)请写出 BOOL flag 与“零值”比较的 if 语句。(3分)标准答案: if ( flag ) if ( !flag )如下写法均属不良风格,不得分原创 2010-02-07 22:08:00 · 2811 阅读 · 0 评论 -
学习C++的50条忠告(转载)
1. 把 C++ 当成一门新的语言学习(和 C 没啥关系!真的。); 2. 看《 Thinking In C++ 》,不要看《 C++ 变成死相》; 3. 看《 The C++ Programming Language 》和《 Inside The C++ Object Model 》,不要因为他们很难而我们自己是初学者所以就不看;...原创 2010-05-17 10:20:00 · 3101 阅读 · 1 评论 -
C++中的数组和字符串,strlen函数,iostream头文件
C++语法是在C语言的基础上发展而来的,兼容C语言语法。在数组和字符串的概念上也一样。字符数组的定义:原创 2015-06-02 18:39:09 · 4513 阅读 · 1 评论 -
C++中的字节对齐,以及空结构体,数组,union类型,class占用内存长度该如何计算
C++是面向对象的编程语言,兼容C语言。为了描述复杂的数据结构,在C语言中,可以用struct来实现;在C++中,当然也可以这样做,但是,大多数时候,我们还是建议大家使用Class来实现,建立面向对象的思想。本节主要介绍struct,union,class等占用内存时的的使用注意事项和简单的计算方法。原创 2015-06-02 18:05:48 · 3260 阅读 · 0 评论