1、C+笔记一复印C+笔记三:输出输入函数 1:std:coutx; 2:n制表符,相当于按了tab键,在vc中使后输出的数据对齐 std:cout内容t iostream cin/cout五:名字空间中变量重名问题 1:建立一个名字空间 namespace a b = 5; namespace c b = 8; int main int b = 5 std:coutba:bc:bendl; 2:名字空间中的变量重名时,如果其中有main()中的变量,那么不会出错,直接输出main()中的变量,否则就有错误。六:函数 1:通常把函数声明叫做函数原型,而把函数定义叫函数实现七:C+数据类型 1:广义
2、上划分C+数据类型, 常量 - 变量 2:布尔型,它可表示两个逻辑值,1和0。 bool check(变量名); true = 1 false = 03:字符型它存放字符,是计算机字符集中的字符(ASCII码)0255之间,每一个数一个码 4:奇偶校验:a:奇校验规定:正确代码一个字节中1的个数必须是奇数,若非奇数,则在在最高位添1;b:偶校验规定:正确代码一个字节中1的个数必须是偶数,若非偶数,则在最高位添1; 5: 特殊字符 a铃声 (警报声) b回退 f焕页 r回车 tTAB键 v垂直制表 单引号 双引号 ?问号 反斜杠 000八进制 xhhh十六进制 6:双字节型 1:wchar_t,
3、又叫宽字符类型,用来存储汉字,韩文,日文等占两个字节的字符 2:wchar_t wt = L汉 L告诉编译器为“汉”分配两个字节的空间 3:由于“汉”是个汉字,所以我们需要调用一个函数将语言设置为中文简体 4:setlocale(LC_ALL表示设置所有的选项,chs); #include 5:wcoutwt; 7:整型的范围 1:int (-231)(231 - 1) 2:short (-215)(215-1) 3:long (231)(231-1) 4:u int (0)(232-1) 5:u short(0)(216-1) 6:u long (0)(232-1) 7:float(1.2e
4、-38)(3.4e38) 8:(2.2e-308)(1.8e308) 8:浮点型变量 1:float (2 * 2-126) (2 * 21238) a: 0 0 0000000 00000000 00000000 000000 符号 指数位 尾数位(23) 结论:取值范围由指数来定,所以剩余尾数23位,最多可表示2*23个有 效数字 b: 2 * 223 = 8388608个有效数字,求有效的位数,以10为底数,求次方,有效数字为67位 c:8388608,也就是23位数值的容量,它占用6到7位 2:double (2 * 2-1022)(2 * 21024) 64位 a: 0 000000
5、00000 00000000 00000000 000000 符号 指数位(11) 尾数位(52) b:11位指数位 0 2*211-1 -1022 1024 c:有效数字个数为2 * 252个, 10进制中有效数字为1516位 9:const 之后定义的变量为常量,之后不能对它进行修改10:enum numzero, one, two, stree, four; 关键字enum将其后num声明为枚举型,zero代表1八:逻辑运算符 1:凡是用来计算值的操作都可以看作是表达式,表达式总能返回一个值 例 1;它返回了1,只是没有载体。九:面向对象程序语言的主要特征 1:抽象: a:面向对象的思想
6、要求程序员将程序的每一个部分都看作一个抽象的对象,即程序是由一组抽象的对象组成的,更复杂点,这些对象根据他们相同的特征而又进一步组成了一个类。 b:打个比方张明是一个人,我们把它看做一个对象,李四也是一个人,我们也把他看做一个对象,还有王五、赵钱、孙李等等。他们都是一个个具体的对象,但我们可以发现他们都具备几个共有的特征,那就是能够直立行走和会使用工具。所以我们就可以把他们归纳在一起,并抽象地看做一个类人类 2:封装: a:早期的软件由于数据和程序混在一起,导致程序可读性很差,而且修改起来也很困难。许多数据都混在一块,而这些数据又被多个模块相互调用,因此某个模块再改动摸个数据的时候常常会对整个
7、程序产生无法预料的错误 b:面向对象针对这个问题提出了数据的封装,他将每一个数据都封装在各自的类中,又设置了多种访问权限,别的类可以在允许的情况下访问该类中的数据,不允许的情况下则无法访问该数据,从而避免了非法操作和出错的可能性 3:继承: a:正如前面所说,我们在发明一个新式发动机的时候不想重新制作一辆汽车,因此继承这个概念就应运而生了,我们可以将该车定义为一个类,然后在声明一个类,将该车的所有成员都继承过来,其中自然包括发动机,然后在改造这个发动机,这样一辆新车就生产出来了。 4:多态 a:作为一名足球运动员,他们在射门以后可能会产生多种结果 b:我们把这种不同的对象(不同的足球运动员),
8、调用相同名称的函数(射门)却可导致不同的行为或者结果的现象称为多态性 c:在这编程中经常使用,比如说你设计个拳击游戏,那么你定义的多个角色在打出去一拳的时候通常会有多种行为反馈,一拳打空,一拳打倒对方,一拳打在裁判的牙上,把牙齿打飞。十:类、对象、成员、函数1:我们上节所说的人类就是一个类,它包含很多对象,比如张三。;李四。赵钱孙李等人都可算作人类的对象。这些对象都拥有人类共同的功能和数据,比如身高、体重、年龄。性别。另外还会说话、吃饭。睡觉等 *这些功能我们可看做是人类共有的方法或者函数,而具体化人类的身高、臂长的这些数据我们可看作是人类的成员变量2:这样我们就可以进一步地了解,类是由若干个
9、变量和相关的函数组成的。而对象则可拥有这些变量和函数。 3:形象例子:一个硬盘可执行读写操作,这是它的主要功能,又叫方法和函数,他还有型号、容量和转速等数据,我们把它叫做变量。二硬盘又有好多种品牌,如迈拓硬盘、希捷硬盘、西部数据硬盘等,我们把这些品牌看作电脑这个大类的对象。这些对象都拥有硬盘类共有的功能和数据,比如希捷硬盘有型、容量和转速等数据, 这是硬盘类的共同数据,又叫成员变量,而且希捷硬盘有读取数据和写入数据的功能,这是硬盘类的共同方法,又叫成员函数 4:每个对象都可将自己的数据进行封装,以避免别的对象修改。比如说希捷硬盘某个型号的容量是80G,这个数据只是为希捷硬盘某个型号所拥有的,迈
10、拓硬盘厂商不可能去修改希捷硬盘的容量,因为迈拓硬盘也有自己的容量,它可能是80G,也可能是180G,这是由迈拓硬盘的生产商自己来定义。 总结: 硬盘是个类,希捷硬盘是该硬盘类的一个对象,型号、容量和转速是该类的数据成员,读取数据、写入数据是该类的方法成员,又叫成员函数;数据成员和成员函数统称为该类的成员,对象拥有并且可以封装这些成员 5:声明一个类 class Human public: void GetStature(); /声明一个函数 / 英文身高 void GetWeight(); private: int stature; int weigth; ; a:public :表示他后面的
11、成员都是公有的,该类的对象可以直接访问这些成员 b:private:表示它后面的成员都是私有的,不能被对象直接访问,必须通过公有的成员函数才能访问 总结:声明这个类并没有为人类分配内存,他只是告诉编译器:人类是什么,它包含了那些类型的数据,功能是什么 ,并告诉编译器该类有多大, 大小 = 成员变量。 该类的方法不占用内存,因为我们没有为方法(声明的函数)声明类型,他们的返回值是void。 6:定义一个对象 a:huma Mike; 就定义了“huma”类下的一个叫“Mike”的对象 b:类只是个抽象的名词,而对象则是实际的个体,比如说人类是泛指所有的人,而迈克却是一个具体的人,是一个活生生的人
12、而你绝对不会把迈克和丹妮混淆,因为他们数据有着本质的不同 c:Human Mike; Mike.set_weight(50); Mike.get_weight(); d:类是个抽象的名词,他不是具体的某个个体,因此我们无法对他进行赋值操作,正如无法对int类型赋值一样,因为int也代表一个类型,而不是某个具体的变量 Human.weight = 100错误 Human Tom; Tom.weight = 100;对的; f:总结函数是用来执行一定功能的代码块,成员函数则是只能被类的对象所使用的函数 7:定义函数 a:一般来说当我们定义了一个函数后,编译器就会在内存中为其创建一个指令集,当我们调
13、用这和函数时,程序就会跳转到该指令集处,当该函数运行完毕后,程序又会返回到原来执行调用该函数的下一行继续执行。假如对该函数执行了上百次调用,那么就要来回跳转上百次,和明显这是相当影响程序执行效率的。 b:关键字“inline”,内联函数, inline int 函数名(); int 函数名() 程序语句 ; 好处:这样编译器将不会创建真正的函数,而是将这个内联函数的所有代码拷贝到调用函数中,这样程序在执行调用该函数时就不需要来回跳转,自然就提高了程序运行时的效率。 坏处:无形中增大了程序的体积 建议用于一些小的被调函数 c:const在函数上的应用,不让某个成员函数修改变量的值 例:void
14、print() const couta = a; 8:构造函数 *使用原因:在创建某个类的对象时,由于对该对象的状态(数据)不是很明确,因此需要对其进行初始化。比如说我们要在长方形这个类中创建一个对象,或者说新建一个长方形,那么我们首先要确定它的长和宽,假如我们无法确定它的长和宽,那么我们是无法造出一个长方形来的。 我们要创建这个长方形,就必须使用这个长方形类中一个用来构造该类所有的对象的函数-构造函数,由于该函数要在创建一个新对象时使用,因此他不可能存在于对象之后,那么我们就必须在类中对它进行声明和定义。 a:定义的函数名和类名一样 class Human public: Human(cha
15、r x, int y) cout正在构造一个人.endl; xb = x; age = y; void show() constcout是xb的endl; cout年龄为ageendl; private: char xb; int age; ; b:假如没有构造函数,那么系统会为我们自动创建一个构造函数,该函数什么参数也没有,而且也不执行任何功能,它的作用只是构造一个对象 就好像rectangel() c:可以有多个构造函数,同时有不带参数的和带参数的 9:析构函数 a:析构函数用于在对象被销毁后清除他所占用的内存空间,比如说他可以清除由构造函数创建的内存 b:public: A() 注意:1
16、.析构函数跟构造函数一样不能有返回值 2.析构函数不能有参数 3.只能有一个析构函数 c:每个对象在创建时都会自动调用该类的构造函数,这里调用了我们自定义的构造函数,程序结束时,对象a的生命也自然终止,编译器会自动调用该类的默认析构函数来释放掉 该对象所占的内存,如果用户自定义了,那就执行自定义的析构函数 d:示例: Human() cout这个人已经死了. p-.get()该符号可以实现读取对象的内存地址并且访问该对象的成员的作用. 16:在构造函数中开辟内存空间 a.我们可以将类的数据成员定义为一个指针,然后在析构函数中开辟新空间,将该空间的地址赋给指针.而在析构函数中释放该内存. b.p
17、rivate: int * p; Human() p = new int(999) c.一个在堆中创建的对象通过成员指针在创建新的空间用来保存数据并没有什么意义.因为在堆中创建对象时已经为它的所有数据成员提供了保存空间. 17:this指针 a.对象要在属于自己的每个成员身上写下自己的名字,以证明该成员是自己的成员,而不是别的对象的成员. this变量帮助对象做到这一点,this变量记录每个对象的内存地址,然后通过间接访问运算符-访问该对象的成员. b.这说明this变量记录每个单独的对象的内存地址,而this指针则指向每个单独的对象.因此不同的对象输出的this变量的内存地址也不同. c.由
18、于this指针保存了对象的地址,因此你可通过该指针直接读取某个对象的数据,它的作用将会在后面的重载运算符中得到演示,现在我们只需要知道 this变量保存的是对象的地址,那么this指针就是指向对象的指针.另外this指针的创建与删除由编译器来完成. d.需要注意的地方:因此在删除一个指针后,我们一定要将其赋为空.虽然使用空指针是非法的,容易使程序崩溃,但是我们宁愿程序崩溃,也不愿意调试起来困难. 由于这程序运行以后立即崩溃了,而空指针使用不当又会导致程序崩溃,因此我们立即明白是哪里出了错,从而迅速纠正它. 18:指针的各种常量 a.int * const p; 常量指针,他自身的值是不可改变的,但是它指向的目标却是可以改变的. b.const Human * p 指向常量的指针,只是限制我们修改它指向的目标,他自身是可以被修改的. c.const Human * const p; 指向常量的常指针,都不可修改.十二:引用 1:什么是引用
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1