c++
Kaih23
三思方举步,百折不回头
展开
-
C/C++指针
在C/C++中,不允许将一个常量复制给一个指针变量,最容易犯的错误就是将一个指向常量的指针复制给另一个指针变量:eg: float temperature = 37.5 ; const float * p = & temperature; float *pi = p;编译器会报错第三行,不能将一个 const float * p 的指针赋值给 float *原创 2015-02-02 19:25:59 · 463 阅读 · 0 评论 -
C++中的const,static const和static类成员的初始化问题
C++中, const, static const, static这三种类成员的初始化容易出问题:const 作为类成员,只能在构造函数初始化列表中被初始化;static 作为类成员,所有类对象共享该成员,只能在类外部的.cpp文件中被初始化,初始化时不用指明static属性;static const 作为类成员,为const成员作为所有类共享的数据在类内初始化提供了可能,声明该变量是原创 2016-05-08 21:13:15 · 3883 阅读 · 0 评论 -
C++左值引用
按照左值引用传参,返回值引用类型原创 2016-07-19 16:13:18 · 1055 阅读 · 0 评论 -
C++右值引用
1、右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题。但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了CopyElision、RVO(包括NRVO)等编译器优化技术,它们可以防止某些情况下临时对象产生和拷贝。下面简单地介绍一下CopyElision、RVO,对此不感兴趣的可以直接跳过:(1)CopyElision Cop转载 2016-07-19 15:43:09 · 704 阅读 · 0 评论 -
EXTERN C 关键字
当我们通过C++来调用一些按照C语言开发的库时,利用C++编译器编译该程序后会发现编译器报错,大概意思是:找不到某个函数的定义。原因:函数链接阶段无法找到C函数。C++中使用了函数重载的机制,导致函数名相同的函数功能相差可能非常大,而C语言没有函数重载机制,因此不同函数仅通过函数名来区分。因此,利用C++编译器编译函数时,函数被编译后的名称将包含函数的参数类型,用以区别相同函数名而不同参数的函原创 2016-07-18 11:08:20 · 329 阅读 · 0 评论 -
C++中单字符与字符串的读取
1.单字符输入两个成员函数:int get(void); istream& get(char &ch)这两个函数读取输入流中下一字符,即使该字符是空格、制表符、换行符等。区别:遇到文件结束符EOF时int get(void);返回EOF,而 istream& get(char &ch)将返回转换为false; istream& get(char &ch)可以拼接使用,而i原创 2016-07-13 15:57:49 · 4231 阅读 · 0 评论 -
从结构体成员获取结构体地址的方法
今天朋友面试,有一个问题他没回答上来,我便在这里给出答案,希望能帮助到一些准备找工作的同学。面试官会问道:已经知道结构体对象中的一个对象,如何获取结构体的地址呢?因为结构体成员在内存中的存储数据是按照成员定义顺序存储的,因此,要回答这个问题,首先得解决两个问题1):该结构体成员的地址2):该结构体成员在结构体中的偏移地址意识到这两个问题,还得注意两个细节:1):C/C++语原创 2016-07-12 16:50:10 · 7756 阅读 · 0 评论 -
C++中构造函数创建对象
1、 C++中构造函数的调用方式主要分为两类:1)显示调用:eg: Stock food = Stock("360",250,2.5);2)隐式调用;eg:Stock food("360",250,2.5);注意:显示调用构造函数大多编译器理解为对food进行初始化,这也是最正确的理解方式,因此直道food所在的作用域到达尽头,才调用析构函数进行清理;而有的编译器将Stock原创 2016-05-02 00:12:45 · 5135 阅读 · 1 评论 -
C++多继承中虚基类
C++中多继承时,派生类难免继承两个或多个基类的同名函数,因此,对于派生类对象调用同名函数时便产生了二义性(该对象不知道到底调用来自于哪一个直接基类的函数)。解决办法:虚基类。虚基类使得从多个类派生出的对象只继承一个基类对象,而此时,从多个类派生出的派生类必须定义每一个同名函数,否则编译时报错。见P556。原创 2016-06-01 17:37:08 · 725 阅读 · 0 评论 -
C++类继承
公有派生:基类的共有成员将成为派生类的公有成员;基类的私有部分也将成为派生类的私有部分,但是,该部分只能通过基类的共有和保护方法访问。因此,派生类对象将存储基类的数据成员,派生类对象也可以使用基类的方法。派生类的初始化:派生类的构造函数必须调用基类的构造函数来初始化基类数据成员。因此,创建派生类对象时,程序首先创建基类对象,也就是说:基类对象必须在程序进入派生类构造函数之前被创建,因此原创 2016-05-23 23:10:45 · 692 阅读 · 0 评论 -
c++中的cin,cin.get(),cin.getline()读取字符串
人老了,记性不好了,看一篇忘一遍,还是梳理下吧!这里所谓的字符串为C-风格字符串,即含有空字符结束符的字符数组;原创 2016-04-24 18:02:26 · 8546 阅读 · 0 评论 -
C++宏定义详解
一、#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析转载 2015-01-21 17:24:10 · 498 阅读 · 0 评论 -
生僻的C语言数据结构:位域
C语言提供了一种数据结构,称为“位域”或“位段”。位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。为了节省存储空间,并使处理简便,所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。位域定义与结构定义相转载 2015-01-21 10:33:47 · 639 阅读 · 0 评论 -
C++中的##,#,你会用吗
##用作define中可以连接两个字符串;#用作define中可以转换为字符串;#@用作define中可以转换为一个字符; 比如:#define Conn(x,y) x##y #define ToChar(x) #@x #define ToString(x) #x int a=Conn(12,34); char b=ToChar(a); ch原创 2015-01-20 09:55:51 · 644 阅读 · 0 评论 -
C++之 new 动态分配内存
动态内存分配1.堆内存分配 :C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。堆的概念:通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;有些操作对象只在程序转载 2015-02-04 09:37:16 · 1476 阅读 · 0 评论 -
常量对象、常量成员函数、常量成员函数的非常量重载版本。
奇妙却非比寻常的const原创 2016-08-06 16:26:18 · 1527 阅读 · 0 评论