- 博客(34)
- 资源 (25)
- 收藏
- 关注
原创 (一三五)第十二章编程练习
1.对于下面的类声明class Cow{char name[20];char * hobby;double weight;public:Cow();Cow(const char*nm, const char * ho, double wt);Cow(const Cow &c);~Cow();Cow & operator=(const Cow &c);vo
2016-01-30 01:56:04 735
原创 (一三四)第十二章复习题
1.假设String类有如下私有成员:class String{private:char*str; //points to string allocated by new//...};a.下述默认构造函数有什么问题?String::String(){}b.下述构造函数有什么问题?String::String(const char* s){str=s;
2016-01-30 01:35:01 560
原创 (一三三)队列模拟
所谓队列,大概就是指能够容纳一定数量有序的项目,新的项目被添加到队尾,也可以删除队首的项目。(比如银行排队办业务) 队列是先进先出原则(栈是LIFO)。 队列的特征有:①队列存储有序的项目序列;②队列所能容纳的项目数有一定限制;③应当能够创建空队列;④应当能够检查队列是否为空;⑤应当能够检查队列是否为满;⑥应当能够在队尾添加项目;⑦应当
2016-01-30 01:32:55 668
原创 (一三二)类的三种常见技术
重载>运算符:例如:ostream& operator其中:①ostream类表示cout等,也支持写入文件的ofstream类。同理,也可以换位istream、ifstream类(但要把重载运算符也换为>>); ②Player&表示类对象的引用,之所以用const进行限定,原因在于为了即可以支持被const限定的对象,也可以防止传递的引用被修改; ③假如类有返回需要值
2016-01-30 01:22:26 429
原创 (一三一)指向对象的指针
类对象也可以像基本类型那样,使用指针。 假如有Man类的对象a,可以使用指针指向它:Man* c=&a;这里表示指针c(类型为Man)指向对象a的地址(使用地址运算符&)。 也可以使用new:Man *a=new Man;这是new一个动态内存地址,类型为Man,然后用a指向地址。new的过程中,调用默认构造函数创建一个对象,被放在堆,而指针a指向的则是这个对象
2016-01-30 01:17:22 741
原创 (一三〇)有关返回对象的说明
当函数/成员函数,返回对象时,有几种返回方式:①返回指向对象的引用(例如String& operator=(xx,xx)); ②返回被const限定的指向对象的引用(例如const String& operator=(xx,xx)); ③返回const对象(这个之前没有遇介绍过)。 ④返回对象(一般返回的不是类对象,而是类中的某一个数据对象。如果返回类对象的话,会调用复
2016-01-30 01:14:17 747
原创 (一二九)类中使用new
在类定义——主要是类的构造函数中使用new时,需要注意很多问题:①按照一个new对应一个delete的原则。 ②构造函数中使用new/ new [],那么析构函数中就应该使用delete/ delete[]; ③析构函数中使用delete/ delete[],那么构造函数、默认构造函数、复制构造函数,都应该使用new/ new[]。 ④且new和delete应该保持一致
2016-01-30 01:11:34 1343
原创 (一二八)比较成员函数、中括号表示法、静态成员函数
有比较函数是strcmp (参数1, 参数2) 参数是两个字符串,所在头文件是 比较方法是按顺序依次比较参数1和参数2的第一个字符(看ASCII值)。假如相同,则比较下一个;假如参数1的比参数2的大,则返回1(正数);假如参数1的比参数2的小,则返回-1(负数);假如两个字符串完全一样,则返回0。 其原理是(这个我自己写的):int strcmp(c
2016-01-25 14:56:11 887
原创 (一二七)动态内存和类——第十二章
面对基本类型的时候,我们可以使用动态内存(new和delete)。 而面对类的时候,也可以使用动态内存,只不过使用方法有区别。 例如声明一个私有成员,想要这个私有成员的值为一个字符串(但这个字符串是什么是未知的)。首先,不考虑用char word[40];这样的。原因有两点:①实际字符串可能超过40个字符;②对于没有超过的,很可能导致内存浪费(例如创建了1w个对象,有9000个
2016-01-25 14:47:33 558
原创 (一二六)第十一章编程练习
这是我创建的专辑,所有学习笔记都以word格式上传,放在里面,相对更美观和直接。欢迎下载浏览。http://download.csdn.net/album/detail/29711.修改程序清单11.5,使之将一系列连续的随机漫步者位置写入到文件中。对于每个位置,用步号进行标志。另外,让该程序将初始条件(目标距离和步长)以及结果小结写入到该文件中。该文件的内容与
2016-01-23 02:32:57 1236
原创 (一二五)第十一章复习题
1.使用成员函数为Stonewt类重载乘法运算符,该运算符将数据成员与double类型的值相乘。注意用英石和磅表示时,需要进位。也就是说,将10英石8磅乘以2等于21英石2磅。答:Stonewt Stonewt::operator*(double a){Stonewt q;q.stone=stone*a+pounds*a/14;q.pounds=(pounds*a)%14;
2016-01-23 02:27:22 567
原创 (一二四)给类对象赋值、以及类对象的返回值
于直接给对象赋值:之前学过,如何给对象在初始化时进行赋值。对于C++11来说,初始化方式有三种:① man c = man{ "cc",1 };② man d = { "dd",1 };③ man f{ "ff",1 }; 假如有一类M,他有两个私有成员a和b(int类型)。于是新建一对象M q; 对象q使用默认构造函数(假如都赋值为0,这个不重要);现在,我们
2016-01-23 02:26:53 1410
原创 (一二三)矢量坐标计算
一个类,包含极坐标和直角坐标。 两个这样的类对象,通过运算符重载,可以直接相加/相减,并得出一个新的坐标,而这个新坐标,是原来两个对象的矢量相加的结果。 代码如下://Point.h 包含类定义#pragma onceclass Point{public: enum mode { xy = 0, ji = 1 }; //常量private: double x; /
2016-01-23 02:22:13 3106
原创 (一二二)友元函数
由于C++控制了对类对象的访问(例如不允许访问私有成员)。于是,通常公有类方法(例如:成员函数)提供唯一的访问途径。 这样保护了私有成员,但同时又因为这种限制太严格,以致于不适合特定的编程问题。 在这种情况下,C++提供了另外一种形式的访问权限:友元。 友元有三种:①友元函数;②友元类;③友元成员函数。 通过让函数成为类的友元,可以赋予
2016-01-23 02:20:39 563
原创 (一二二)运算符重载——第十一章
本章重点是类设计技术,而不是通用原理。 C++的重点是多使用。正如我之前写了这么多的学习笔记一样,几乎绝大部分的代码,都是我根据书上的知识,然后理解自行再创造写下的。虽然遇见了不少问题,但解决后,下次再遇见这类情况,解决起来很轻松,绝大多数都可以直接靠记忆书写代码,即使个别忘记了,回头翻一番笔记,基本也能解决,需要靠百度去解决的,已经很少了。 运算符重载是一种形式的C++
2016-01-23 02:13:56 533
原创 (一二一)第十章编程练习
1.为下面这个类提供方法和定义,并编写一个小程序用于演示所有特性。一个类来表示银行账户,数据成员包括储户姓名、账号(使用字符串)和存款。成员函数执行如下操作:①创建一个对象并将其初始化;②显示储户姓名、账号和存款;③存入参数指定的存款;④取出参数指定的款项。#includeclass Bankaccount{std::string name;char id[
2016-01-19 01:11:52 3719
原创 (一二一)第十章复习题
1.什么是类?答:类是用户自定义类型,有私有成员(不能被外界直接访问)和公有成员(需要用“类名.公有成员名”来访问)。类的链接性为内部(即只在当前文件可用),类不能在函数内部定义。补充:类声明指定了数据将如何存储,同时指定了用来访问和操纵这些数据的方法(类成员函数)。 2.类如何实现抽象、封装和数据隐藏?答:实现抽象靠的是类的定义,描述一个东西的各方面情况,用各种
2016-01-19 00:57:11 1014 1
原创 (一二〇)抽象数据类型
抽象数据类型(abstract data type, ADT),是以通用的方式描述数据类型,而没有引入语言或实现细节。 程序员常常通过定义类,来表示更通用的概念,而对于抽象数据类型,使用类是一种非常好的方式。 当类概念使用ADT方法时,一般是这样做:①私有部分必须表示数据存储的方式。例如,可以使用常规数组、动态分配数组或更高级的数据结构(如链表); ②公有接口应隐藏数据
2016-01-19 00:55:28 703
原创 (一一九)类作用域
变量、函数具有不同的作用域,C++的也引入了一种新的作用域:类作用域。 在类中定义的名称(如类数据成员和类成员函数名)的作用域,都为整个类,作用域为整个类的名称,在该类之中是已知的,在类外是不可知的(如私有成员变量、公有成员变量和函数也算,因为需要使用作用域解析运算符才能调用)。 因此,可以在不同类中使用相同的类成员名而不会引起冲突(例如man类里有一个int a,而player类
2016-01-19 00:53:04 566
原创 (一一八)对象数组
对象的数组,和声明一个普通的结构数组并没有什么区别。 在默认情况下,单纯的声明一个对象数组(未显式的调用构造函数时),那么将调用默认构造函数为对象数组的每个成员进行赋值(具体赋值情况需要根据默认构造函数而定)。 如代码:#include#includeclass man{private: std::string name; int a;public: man(
2016-01-19 00:50:42 360
原创 (一一七)this指针
所谓this指针,是一个指针,且这个指针用于类函数定义内部,指向当前对象(的地址)。 this指针的特点:①只能用于类定义内部; ②使用方法同结构指针,即使用运算符“->”; ③指向的是当前对象,即对象a使用这个类方法,其this指针指向的是对象a; ④this->私有成员 这个在大多数情况下,和只用私有成员效果是一样的,但是若参数名和私有成员名相同,那么这种
2016-01-19 00:49:23 482
原创 (一一六)类的构造函数和析构函数
类构造函数:构造函数 是专门用于构造新对象、将值赋给它们的数据成员。C++为这些成员提供了名称和使用语法,而程序员需要提供方法定义。名称与类名相同。例如:Stock类的一个可能的构造函数是名为Stock()的成员函数。构造函数的原型和函数头有一个有趣的特征——虽然没有返回值,但没有被声明为void类型。实际上,构造函数没有声明类型。 声明和定义构造函数:和使用普通
2016-01-19 00:39:28 578
原创 (一一五)类
OOP(Object Oriented Programming,面向对象编程)最重要的特性:①抽象;②封装和数据隐藏;③多态;④继承;⑤代码的可重用性。注:以上不太懂,再ps:看完全部就懂了 过程性编程:一般先考虑遵循的步骤,然后考虑如何处理这些数据(可能需要把这些数据放存储在一个文件之中,写入和读取)。 面向对象编程:①考虑如何表示数据、
2016-01-19 00:25:04 417
原创 (一一四)第九章编程练习
1.下面是一个头文件:// golf.h -- for pe9-1.cppconst int len = 40;struct golf{char fullname[len];int handicap;}; // non-interactive version:// function sets golf structure to provided name,
2016-01-13 23:56:35 1173 1
原创 (一一三)第九章复习题
1.对于下面的情况,应使用哪种存储方案?a。homer是函数的形参。b。secret变量由两个文件共享。c。topsercret变量由一个文件中所有函数共享,但对于其他文件来说是隐藏的。d。beencalled记录包含他的函数被调用的次数。 答:a。自动变量;b。外部变量;c。静态内部变量;d。无链接性的静态变量。c补充:也可以在一个未命名的名称空间中定义 2。
2016-01-13 23:55:44 598
原创 (一一二)名称空间
在C++之中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。随着项目的增大,名称相互冲突的可能性也将增加。 使用多个厂商的类库时,可能导致名称冲突。 例如两个类库都定义了名称为List、Tree和Node的类,但定义的方式并不兼容(一个干这个,一个干那个),如果你需要使用第一个的List,第二个的Tree,你就不能一口气把两个类库都包含进去(就像using namespa
2016-01-13 23:50:40 418
原创 (一一一)存储持续性、作用域和链接性
在之前,说过自动存储(随函数内声明而建立,函数消亡而消亡)、静态存储(全局都存在)、动态存储(一般是用new)。 但是,涉及到多文件的时候,存储类别如何影响信息在文件间的共享。 C++使用三种(C++11使用4种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间。 自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性是自动的。它们在程序开始执行
2016-01-13 23:24:04 686 1
原创 (一一〇)二维数组里找零最多的题目
题目 - 最大零矩阵(附加题)描述有一个二位数组 m(2 5 0 0 8 11 153 0 0 0 0 12 167 0 0 0 0 13 178 0 0 7 1 14 184 0 0 0 0 0 06 0 0 0 0 0 0这是6行,7列构成的二维数组,其中:由第4~5行(最后2行),第1~6列(最后6列)构成的子数组最大,共有12个0元素,因此,应该输出 1
2016-01-13 23:22:49 670
原创 (一〇九)单独编译(多个源代码文件和头文件)
单独编译的简单原理:C++在内存中储存数据提供了多种选择。 可以选择数据保留在内存中的时间长度(存储持续性)以及程序的哪一部分可以访问数据(作用域和链接)等。可以使用new来动态地分配内存,而定位new运算符提供了这种技术的一种变种。C++名称空间是另一种控制访问权的方式。 通常,大型程序都由多个源代码文件组成,这些文件可能共享一些数据。这样的程序涉及到文件的单独编译。
2016-01-11 01:41:24 3524 2
原创 (一〇八)第八章编程练习
1。编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个函数(int类型),且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数(注意,字符串的打印次数不等于第二个参数的值,而等于函数被调用的次数)。是的,这是一个非常可笑的函数,但它让您能够使用本章介绍的一些技术。在一个简单的程序中使用该函数,以演示该函数是如何工作的。 答:#includeu
2016-01-10 21:23:39 1792
原创 (一〇七)第八章复习题
1.哪种函数适合定义为内联函数?答:短小的,执行速度快的,占用内存小的适合。还有非递归的 2.假如song()函数的原型如下:void song(const char* name, int times);a.如何修改原型,使times的默认值为1?b.函数定义需要做哪些修改?c.能否为name提供默认值“O.My Papa”? 答:a。 修改成:void son
2016-01-10 21:23:05 543
原创 (一〇六)函数模板
函数模板的意义在于,可以在不同的参数下,起到同样的作用。按照教程所说,它们使用泛型来定义函数,其中泛型可用具体的类型(如int、double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。 由于模板允许以泛型(而不是具体的类型)的方式编写程序,因此在有时也会被称为是通用编程。 由于类型是用参数表示的,因此模板特性有时也被称为参数化类型。 格式:te
2016-01-09 17:32:34 511
原创 (一〇三)引用变量及相关(万字长文)
****本篇大概近万字****格式:int a = 1;int &b = a; //b作为a的别名,是一个a变量的引用,需要在声明时进行初始化 效果:①b是a的引用变量,b的值和地址,和a是相同的,且不会改变; ②在声明引用变量b时,需要同时对变量b进行初始化,即不能先声明,然后再初始化;原因是引用变量b需要根据他被引用的变量,而拥有地址,而不是有自己独
2016-01-06 17:32:12 574
原创 (一〇二)内联函数
元旦了,各种打不开博客。元旦结束,博客好了,是因为元旦放假程序员都回家了嘛?————————————————————————————————内联函数和普通函数有所区别。 普通函数需要①函数定义②函数原型③函数调用,具体调用形式是,先调用时,储存当前函数的内存地址(假设为地址A),然后调用函数,跳到被调用函数的内存地址(地址B),然后在地址B处依次执行,等执行完被调用的函
2016-01-04 14:38:01 444
nodejs创建的express博客的base版本
2016-07-27
卡牌游戏源代码(CMD窗口)
2016-02-29
《C++ Primer Plus第6版中文版》学习笔记(第十章)
2016-01-19
《C++ Primer Plus第6版中文版》学习笔记(第十一章)
2016-01-19
C++语法学习笔记(至六十一)
2015-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人