![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 60
lemonrabbit1987
奔跑在追梦的路上
展开
-
C++类的const, static 和inline成员函数(变量)
在C++类的声明中包含多个函数或变量的声明或定义。这些函数和变量可以分为以下几类,这几类并不是完全没有交集的,常量成员函数可以是内联成员函数,内联成员函数也可以是常量成员函数:普通成员函数和变量 在类中定义的不带有任何修饰符的成员函数或变量。 /**************************************** * original_member.cpp原创 2015-09-21 06:31:30 · 2489 阅读 · 0 评论 -
C++编译器为类自动生成的函数
我们可以构建一个空类,class Empty{};尽管没有定义任何函数,但我们可以通过以下方式使用这个类:Empty e1;Empty e2(e1);e2 = e1;因为当编译器发现你用上述方式使用这个类而却在类声明中没有定义一般构造函数(非复制构造函数)、复制构造函数、赋值操作符重载函数和析构函数时,会自动为其生成这些函数,上面的Empty类经编译后就对应着下面的类:class Emp原创 2015-09-23 22:52:51 · 2509 阅读 · 0 评论 -
C++不同编译单元内定义的非局部静态对象的初始化顺序
静态对象是指具有静态存储期限的对象,即从定义式开始,分配的内存空间一直保留到程序结束的对象,包括全局变量、定义于命名空间的对象以及使用static修饰符声明的对象。静态对象分为两类,具有程序块作用域的static对象称为局部静态对象,其余的成为非局部静态对象。对于在同一个编译单元(产生单一目标文件的源码,由单一源文件和其包含的头文件构成)定义的非静态局部对象,它们的初始化顺序是由其定义顺序决定的,而原创 2015-10-12 12:12:52 · 1500 阅读 · 0 评论 -
C++的类的声明及成员变量和成员函数
C++通过类及相关的封装、继承、多态和虚函数机制支持面向对象的程序设计和开发。类是一类事物的抽象,它封装了描述这类事物的共同属性和行为的数据结构和方法。C++中类的声明(也又称)式如下:class 类名{ 访问范围说明符: 成员变量1; 成员变量2; ... 成员函数1声明; 成员函数1定义;原创 2015-09-19 07:23:53 · 8818 阅读 · 0 评论 -
C++类成员的访问控制
C++使用private,public和protected关键字约束类成员的可访问范围。private 指定私有成员,说明定义的函数或变量只能在该类的成员函数内使用,其他对成员变量的访问必须通过成员函数进行;public 定义了类的公用接口,可以在任何地方被访问;protected 指定了被保护的成员变量和函数,这类函数只能在类的成员函数内、子类或友元中被访问。class 类名{原创 2015-09-20 06:35:03 · 1081 阅读 · 0 评论 -
C++程序与非C++程序的链接
C++程序中可能包含由其他语言(例如C语言)写出的内容。不同的语言可能在使用寄存器保存参数的方式、参数放入堆栈的顺序及编译器传递给链接器的方面存在差异,造成程序之间的协作比较困难。例如C++为支持重载,程序编译后的名称与C语言不同,例如一个foo函数:int foo(int x, int y);在C++语言编译后生成的名字就是类似_foo_int_int的名称,而C语言编译后就是_foo。因此当在原创 2015-09-18 06:39:43 · 375 阅读 · 0 评论 -
C++的异常处理
当程序由多个相互分离的模块构成,错误处理的工作需要分成两个部分:某个模块报告出那些无法在局部解决的问题,而另一些模块处理那些在其他模块检查出的问题。异常机制是C++中将错误报告和错误错里分离开的手段。如果函数发现了自己无法处理的问题,就会抛出(throw)一个异常,由它的调用者来处理这个问题。异常抛出的程序结构为:throw 异常对象;如果一个函数想处理这个问题,它就要说明自己要捕获(catch)原创 2015-09-17 15:28:49 · 330 阅读 · 0 评论 -
C++中的名字空间
C++中引入了名字空间(namespace)的概念。名字空间有两方面的用途,一是将逻辑上相关的元素组织在一起,更重要的一点是解决函数和变量重名问题。命名空间的定义方式如下:namespace 名字空间名称{ //声明和定义}当在一个名字空间内访问另一个名字空间的函数、变量等时,需要额外添加限定词形如“名字空间名称::变量或函数名”。访问同一个名字空间的函数不需要限定符。/*******原创 2015-09-16 09:56:41 · 416 阅读 · 0 评论 -
C++程序中尽可能使用const
const用在变量声明和定义式中,用以为变量提供语义约束,说明该变量是不可以改变的,可用以修饰全局变量、局部变量、静态变量、类成员变量以及定义常量指针和指针常量。const修饰STL迭代器STL(标准模板库)的迭代器的作用类似于指针,声明迭代器为const,类似与定义一个常量指针,可以改变迭代器指向的变量的值,但不能将迭代器指向不同的变量。如果希望迭代器是一个指针常量,可以使用const_itera原创 2015-09-15 13:02:54 · 455 阅读 · 0 评论 -
C++程序中尽量避免#define
使用const,enum替换#define定义常量C语言中常用#define来定义具有某种特殊意义的常量。但是,使用#define宏定义定义的符号会在编译前被替换掉,当因为该宏定义出现问题时,在错误信息中无法获得有关该宏的任何提示,这对错误的发现带来困难,,尽管可以通过查看预编译输出的方式尝试定位问题。同时预处理也会在程序中产生多份副本,造成代码量较大。为了解决这些问题,可以使用const常量替代宏原创 2015-09-12 13:56:53 · 1300 阅读 · 1 评论 -
C++类的复制构造函数
复制构造函数的形式为:class ClassName{...ClassName(ClassName&){...}或ClassName(const ClassName&){...}...};如果没有定义复制构造函数,则编译器会为该类自动生成复制构造函数。如果用户自定义了任何一个类型的复制构造函数,则不再生成默认的复制构造函数。生成的默认构造函数只是简单地进行值的复制。对于包含指原创 2015-09-29 08:23:00 · 852 阅读 · 0 评论 -
C++的动态内存分配
与C语言的malloc, calloc, realloc和free函数对应,C++语言使用new和delete运算符实现动态内存分配和释放。使用new运算符动态分配内存new运算符分配内存分为以下两类情境:一是为变量动态分配内存,而是为数组动态分配内存。其中为变量动态分配内存的一般形式为:T* p = new T(...);T是任意类型名,赋值运算符右边的T后可以跟括号,括号内是初始化该变量的值或原创 2015-09-30 07:15:22 · 805 阅读 · 0 评论 -
C++支持的程序设计范式
C++支持包括面向过程、面向对象、函数式、泛型和元编程形式的多重泛型编程语言。面向过程关注的是处理过程,“确定你需要的过程并采用你能找到的最好的算法”。面向对象关注的是问题中的事物,根据问题“确定你需要哪些类,为每个类提供完整的一组操作,利用继承明确表示共性。”。函数式编程将计算机运算看作是数学中函数的运算,避免了状态以及变量的概念。泛型编程是利用模板,将原本特定于某个类型的算法或类当中的信息抽取出原创 2015-09-06 07:01:03 · 2003 阅读 · 0 评论 -
C++相对于C的两种新的内置类型
在C语言提供的字符、整型、浮点型、指针、数组、结构和枚举等几类类型的基础上,C++又新增了两类基本类型,分别为布尔型和引用类型。布尔型(bool)C语言中没有明确地提供布尔类型,布尔类型的实现往往是通过宏定义或类型定义实现。C++为逻辑运算提供了单独的布尔类型(bool),可以具有值true或false之一,其中true的值被定义为1,false的值定义为0。在算术运算中布尔型都被转换为int。整数原创 2015-09-07 06:26:08 · 805 阅读 · 0 评论 -
C++语言的历史和标准化
1979年4月,贝尔实验室的Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)博士等人负责分析UNIX内核,但当时没有合适的工具能够有效地分析由于内核分布而造成的网络流量,将内核模块化,因此他们的工作进展缓慢。原创 2015-09-05 08:49:08 · 2779 阅读 · 1 评论 -
C++类的构造函数和析构函数
构造函数构造函数是一类特殊的成员函数,它的目的是完成对象的初始化。构造函数的名字和类名相同,可以有参数,但不能有返回类型。class ClassName{ public: /*构造函数,可以在类声明中定义*/ ClassName(参数列表) { } ClassName(参数列表2);};/*构造函数也可以在原创 2015-09-22 06:22:59 · 2714 阅读 · 1 评论