
产品经理学习C++
文章平均质量分 53
yituhuashi
这个作者很懒,什么都没留下…
展开
-
第十六章 复习题
1.这里RQ1包含了一个字符串,public里面其实就是一个默认构造函数,一个构造函数,一个复制构造函数,一个析构函数,一个赋值符运算如果用string的话复制构造函数,析构函数和赋值运算符都可以因为string对象提供了自己的内存管理功能而省去#include using namespace std;class RQ1{private:string st;publ原创 2016-12-28 05:15:59 · 303 阅读 · 0 评论 -
第十章 编程练习4-7
编程练习4//MyTime.h#ifndef MYTIME_H_#define MYTIME_H_#include <iostream>class Time{private: int hours; int minutes;public: Time(); Time(int h, int m); ~Time(); void AddMin(in原创 2016-11-21 04:31:36 · 284 阅读 · 0 评论 -
第十一章 编程练习1-3
编程练习1 这里Vector的类定义没有修改,只需修改主函数,所以这里就只把更改后的主函数贴出来了#include <iostream>#include <cstdlib>#include <ctime>#include <fstream>#include "vector.h"int main(){ using namespace std; ofstream fin;原创 2016-11-21 03:16:22 · 265 阅读 · 0 评论 -
第十五章 复习题
1. a. clasp是友元类,所以声明友元的时候必须的加上一个classfriend class clasp;b.这种情况必须前向声明相关类和函数snip(muff &);class muff;class cuff {...};class muff {..};c. 跟b的情况一样,需要前向声明相关类和函数class muff;class cuff原创 2016-12-12 03:51:41 · 340 阅读 · 0 评论 -
第十一章 复习题
1.Stonewt Stonewt::operator*(double d){ }2. 定义时不同,友元函数不需要使用限定符成员函数可以通过this指针来访问对象自己,友元函数则不能。3. 对4.friend Stonewt Stonewt operator*(double d, Stonewt s1)Stonewt operator*(do原创 2016-11-20 20:18:05 · 319 阅读 · 0 评论 -
第十一章 使用类(1)
前面一章终于学习了类,但类博大精深,一章基本也就知道了怎么定义使用最简单的类。这一章就稍微深入探讨一下类之所以强大的许多特性。1. 运算符重载运算符重载是一种形式的多态,它允许赋予C++运算符多种含义。比如我们想做这样的加法evening = sam + janet ,这三个都是三个对象,这时候我们就要对加号重载。运算符函数的格式如下operatorop(argument-原创 2016-11-20 16:32:42 · 243 阅读 · 0 评论 -
第十章 编程练习
编程练习1//account.h#ifndef ACCOUNT_H_#define ACCOUNT_H_#include <string>using std::string;class Account {private: string fullname; string ID; double deposit;public: Account(string, s原创 2016-11-19 23:00:26 · 302 阅读 · 0 评论 -
第十四章 C++中的代码重用(2)
3. 多重继承上节Student同时继承了String和Valarray类,这个就是多重继承了。这个功能很强大,因为跟实际相符(比如现在的平板,有时可以看出一个电脑,有时也可以归为手机),但用起来也很麻烦,一个很简单的问题就是假如两个(多个)基类都有同名的方法怎么办。书中举了一个抽象基类Worker,派生出Waiter和Singer两个基类,然后可以定义一个SingerWaiter原创 2016-12-01 05:04:44 · 283 阅读 · 0 评论 -
第八章 编程练习
编程练习1#include <iostream>using namespace std;void p(char ch[]);void p(char ch[], int i);const int ChSize = 40;int main(){ char ch[ChSize]; cout << "please enter a string: "; cin.getlin原创 2016-11-15 05:08:34 · 336 阅读 · 0 评论 -
第八章 复习题
1. 比较短小的函数,太大了占用内存太多。2. a. void song(const char * name, int times = 1);b.函数定义不需要做任何改变c.不可以,因为是const3.void iquote(int i);void iquote(double d);void iquote(string s);4.原创 2016-11-15 04:20:30 · 281 阅读 · 0 评论 -
第八章 函数探幽(2)
3. 默认参数默认参数值的是当函数调用中可以给实参赋上一个默认值,这样函数调用时没写实参就自动使用这个默认值默认值(只能)在函数原型中添加。如:double fun(int n = 1);这样fun()就等同于调用fun(1);对于带参数列表的函数,必须从右向左添加默认值:int fun(int a, int b = 2, int c = 3); //可以int原创 2016-11-15 03:18:38 · 206 阅读 · 0 评论 -
第十二章 类和动态内存分配
前面说过,通常最好在程序运行时确定诸如使用多少内存的问题,方法就是使用new来创建动态内存并在使用完之后delete掉。怎么对类成员使用动态内存分配就是本章的主要内容了。这本书到这里也逐步加深了。1. 动态内存和类在类中使用new和delete运算符对类成员进行动态内存分配看似很强大,但代价是使用起来会导致许多新的问题,所以用起来必须小心。1.1 这一小节举了一个StringB原创 2016-11-22 03:03:12 · 276 阅读 · 0 评论 -
第十二章 复习题
1. 类成员str是一个指针,因此构造函数必须提供内存来存储字符串。否则str只保存了地址,而没有在堆中指向的内存创建足够的内存并创建字符副本2. 必须在析构函数中使用delete来在对象使用结束时释放初始化时创建的内存应该定义复制构造函数应该定义赋值函数3. 默认构造函数,如果没有定义构造函数默认析构函数;复制构造函数;赋值运算符;地址运算符-返回调用对象原创 2016-11-23 04:40:02 · 299 阅读 · 0 评论 -
第十四章 复习题
上个礼拜各种事,没有按时学习,惭愧惭愧 :(1.回答这题就是看左右两边是is-a关系还是has-a关系,is-a就用公有继承,has-a就用私有继承公有继承;私有继承;公有继承;私有继承;最后一个有点tricky,Driver是一个人,所以可以public 继承person。Driver可以has一辆automobile,所以可以private继承Automobile。原创 2016-12-06 03:34:50 · 327 阅读 · 0 评论 -
第十六章
C++类库(不是内裤)和stl博大精深,我等初学者肯定现在只有远观还不能亵玩了。本节讲到stl后面基本就基本只能算看懂了,估计要真明白会用得专门那本书去学。这章写到第五节就基本写不下去了。。。先贴上来留个纪念吧,等以后明白了再回来修改现在编程很少有人重头编写了,基本都是直接运用然后部分重写前辈编写的代码。C++的类库就是为这个设计的。这一章首先从最常见的string类讲起。1.stri原创 2016-12-20 03:45:12 · 309 阅读 · 0 评论 -
第十三章 编程练习
编程练习1//Classic.h#ifndef CLASSIC_H_#define CLASSIC_H_//base class#include <cstring>class Cd{private: char performers[50]; char lable[20]; int selections; double playtime;public:原创 2016-11-26 06:16:11 · 288 阅读 · 0 评论 -
第十五章(2)
3. 异常下面讲本章的重点类,异常。出了异常肯定要处理了,C++异常为处理异常提供了功能强大而灵活的工具。一个很简单的例子就是a/b,要是b是0怎么办书中举了一个函数double hmean(double a, double b) {return 2*a*b/(a+b); }如果a=-b怎么办呢,最简单的方法就是调用abort方法终止程序double hmean(double原创 2016-12-08 05:37:25 · 334 阅读 · 0 评论 -
第十三章 复习题
1. 所以public和protected下的数据成员和方法成员2. private中的数据成员和方法成员3. 如果返回void,那么调用这个函数是赋值运算符=左边的对象=void,类型不符编译不会通过如果返回的不是引用,则直接返回对象,之前会生成返回对象的临时副本。返回对象的时间成本包括调用复制构造函数来生成副本所需的时间和调用析构函数删除副本所需的时间。原创 2016-11-25 04:59:38 · 221 阅读 · 0 评论 -
第十三章 类继承
继承很好理解了,如果我们开发了一个水果的类,我们可以继续开发一个苹果的子类或者橙子的子类。苹果和橙子的子类都可以继承水果类的特性和方法。那么这个继承是怎么实现的,哪些可以继承哪些不能继续,苹果和橙子之间又是什么关系,让我们带着这些问题来看这章。1. 一个简单的基类从一个类(水果)派生出另一个类(苹果,橙子)时,原始类(水果)称为基类,继承类称为派生类(苹果,橙子)。书中给了一个简单原创 2016-11-25 04:31:25 · 401 阅读 · 0 评论 -
第十五章(1)
现在讲的越来越深了,有的时候笔记都不知道怎么记了,很多也只能直接抄书上的。这里尽力吧,原谅我们这些初学者:)1. 友元友元现在很熟悉了,如果声明一个函数为一个类的友元,则这个函数可以访问这个类的成员。类也可以将类作为友元,这样友元类的所有方法都可以访问原始类的私有成员和保护成员。这样有什么作用呢?书中举了一个Tv类和一个Remote类的例子。两个类没有从属关系,更像是朋友关系,这个时候原创 2016-12-07 05:12:59 · 452 阅读 · 0 评论 -
第十二章 编程练习
这章开始编程练习都好长,敲都要敲半天。。。 编程练习1//Cow.h#ifndef COW_H_#define COW_H_class Cow{private: char name[20]; char * hobby; double weight;public: Cow(); Cow(const char * nm, const char * h原创 2016-11-24 05:26:33 · 415 阅读 · 0 评论 -
第十五章 编程练习
编程练习1//tv.h#ifndef TV_H_#define TV_H_#include <iostream>class Tv{public: friend class Remote; enum {Off, On}; enum {MinVal, MaxVal = 20}; enum {Antenna, Cable}; enum {TV, DVD};原创 2016-12-13 04:14:08 · 349 阅读 · 0 评论 -
第十四章 编程练习(2)
编程练习4//Person.h#ifndef PERSON_H_#define PERSON_H_#include <string>#include <iostream>class Person{private: std::string name;protected: const std::string &GetName() const { return name; }原创 2016-12-06 05:43:55 · 355 阅读 · 0 评论 -
第十四章 编程练习(1)
编程练习1//winec.h#ifndef WINEC_H_#define WINEC_H_#include <iostream>#include <string>#include <valarray>#include <utility>using namespace std;typedef valarray<int> ArrayInt;typedef pair<ArrayInt, A原创 2016-12-06 04:48:48 · 319 阅读 · 0 评论 -
第八章 函数探幽(1)
这章英文名字叫adventures in Functions,中文译者把它翻译成函数探幽。。。1. 内联函数内联函数是C++提高程序运行速度所做的一项改进。常规函数执行时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数,然后跳回到地址被保存的指令处。这一跳一跳的就降低效率了。而内联函数就不会跳来跳去,但代价就是需要占用更多内原创 2016-11-15 02:20:45 · 264 阅读 · 0 评论 -
第十章 复习题
1到4问题都太抽象了,这里就略过了5.class Account{private:string name;int ID;double deposit;public:show();void add();void withdraw();}6.构造函数在声明一个类的对象的时候调用,析构函数在这个对象使用结束之后调用7.Account原创 2016-11-18 05:07:23 · 291 阅读 · 0 评论 -
第六章 分支语句和逻辑运算符
if语句if语句用来判断是否执行某个操作,具体有三种用法最简单的:if (test-condition)statement也可以让程序决定执行两条语句或语句块的哪一条if (test-condition)statement 1elsestatement 2如果由两个以上的选择的话if (test-condition 1)statement 1原创 2016-11-11 02:42:58 · 254 阅读 · 0 评论 -
第五章 编程练习
编程练习1#include <iostream>using namespace std;int main(){ int a,b; cout << "Please enter the start number: "; cin >> a; cout << "Please enter the end number: "; cin >> b; int su原创 2016-11-10 05:40:55 · 216 阅读 · 0 评论 -
第五章 复习题
1. 入口条件循环和出口条件循环的区别是什么时候判断是否运行循环体的代码。for和while循环都是入口条件循环,在循环之前判断测试表达式,然后决定是否开始继续或者终端循环。do while循环则是出口条件循环,先开始执行循环体代码,然后在判断测试表达式,从而决定是否继续或者终止循环。2. 012343. 0369124.685.原创 2016-11-10 05:00:57 · 337 阅读 · 0 评论 -
第五章 循环(2)
while循环先摆出用法while(test-condition)body很好理解,执行循环之前先判断test-condition是否满足,如果满足就执行,如果不满足,就跳出循环现在和for循环对比可以看出他们本质上没什么区别 ,可以互换,例如for(int i=0;icout可以改成int i=0;while(icouti++;}w原创 2016-11-10 03:43:20 · 216 阅读 · 0 评论 -
第五章 循环和关系表达式(1)
循环是程序的主要操作之一,循环最主要的功能之一就是简化代码,另外就是通过嵌套啊什么的可以实现很多算法。c++ primer plus第五章介绍了循环和关系表达式的基本用法。其实这一章非常简单,主要是介绍or循环,while循环和do while循环的用法和区别,外加if语句和switch语句。但是本章也涵盖了很多小知识,还是可以细细体味的。首先从for循环开始,for循环的基本结构原创 2016-11-09 05:54:45 · 292 阅读 · 0 评论 -
第四章 编程练习
编程练习4.1#include <iostream>#include <string>int main(){ using namespace std; string firstName; string lastName; char gradeDeserve; int age; cout << "what is your first name? ";原创 2016-11-09 04:09:48 · 198 阅读 · 0 评论 -
第四章 复合类型(4)
9 C++对数据内存的管理方式C++有三种管理数据内存的方式:自动存储,静态存储和动态存储。C++ primer plus第四章做了简单的介绍自动存储:在函数内部定义的常规变量使用自动存储空间,被称为自动变量,意味着他们在所属函数被调用时自动产生,在该函数结束时自动消亡。换句话说,自动变量就是一个局部变量,其作用域就是包含它的代码块。静态存储:整个程序执行期间都存在原创 2016-11-09 02:49:08 · 211 阅读 · 0 评论 -
第四章 复合类型(3)
7. 指针和自由存储空间终于提到指针啦。首先得提一提指针策略,“它是C++内存管理编程理念的核心”:这个怎么理解呢?面向对象编程OOP强调在运行阶段进行决策,打个比方事先不知道数组里面元素的个数,到使用这个数组时根据具体情况决定元素的个数,或者根据需要来添加或者减少。指针就为完成这一目标提供了基础。声明和初始化指针:int * p_updates;这样就声明了一个指向i原创 2016-11-08 05:47:37 · 230 阅读 · 0 评论 -
第四章 复合类型(2)
3. string类string类比起c风格的字符串就简单多了。使用这个类,必须在程序中包含头文件string,同时运用名称空间std。程序清单4.7 strtype1.cpp 说明了string字符串和字符数组字符串(C风格字符串)的基本使用,从这个例子也可以知道在很多方面,使用string与使用字符数组相同:可以使用c风格字符串来初始化string对象可以使原创 2016-11-08 04:21:03 · 294 阅读 · 0 评论 -
第四章 复合类型(1)
C++ primer plus前三章太基础了,我这就偷偷懒直接跳过了,直接从第四章开始。1.数组数组是啥也不说了,C++声明数组通用格式typeName arrayName[arraySize];e.g float loans[20];typeName就是数组里面的元素的类型,可以是int啊,double啊,或者class都行。一般来说arraySize必须是固定值,但也可以通原创 2016-11-08 03:14:41 · 259 阅读 · 0 评论 -
第六章 复习题
1. 基本没啥区别吧,version2看起来更明了吧2. 会输出ch对应的整形值+13.注意while循环中的if括号里面是复制语句ch='$', 不是关系表达式ch=='$', 所以这个只是把‘$’赋给了ch,然后ct2++,所以输出为:H$i$!$S$e$n$d$ $ct1 = 9, ct2 = 9;4.a.weight>=115 && we原创 2016-11-11 04:30:26 · 314 阅读 · 0 评论 -
第六章 编程练习(1-5)
编程练习1#include <iostream>using namespace std;int main(){ char ch; cout << "Please type here: " ; cin.get(ch); while(ch !='@') { if (isdigit(ch)) { cin.g原创 2016-11-11 05:55:30 · 273 阅读 · 0 评论 -
第九章 内存模型和名称空间
1.单独编译单独编译就是说讲组件函数放在独立的文件中;之后要修改这个函数,只需要重新编译该文件,然后叫它与其他文件的编译版本链接。这样说可能还是比较抽象;到现在为止大家都很熟悉每个函数例子必备的#include 了吧;简单的说就是可以把组件函数放在一个叫做头文件的文件中,然后其他函数来#include这个头文件就可以链接到这个头文件里。书中举了一个包含结构,对结构操作的函数和主原创 2016-11-16 03:17:22 · 278 阅读 · 0 评论 -
第十章 对象与类(2)
类跟结构不一样的地方还有一个就是类应该要提供构造函数和析构函数。构造函数专门用于构造新对象,将值赋给它们的数据成员。构造函数最主要的特点就是名称与类名一样,同时构造函数没有返回值而且不能声明类型。比如前面说的Stock类,它的构造函数就是Stock(...),首先再说明一下,构造函数没有返回类型。同时,构造函数的参数表示的不是类成员,而是赋给类成员的值,因此,参数名不能与类成员相同原创 2016-11-18 04:15:18 · 260 阅读 · 0 评论