Sales_item】的更多相关文章

#ifndef SALESITEM_H #define SALESITEM_H // Definition of Sales_item class and related functions goes here #include <iostream> #include <string> class Sales_item { friend bool operator==(const Sales_item&, const Sales_item&); // other m…
Sales_item.h #ifndef SALES_ITEM_H #define SALES_ITEM_H #include<iostream> #include<string> using namespace std; class Sales_item { friend ostream& operator<<(ostream &os,const Sales_item &); friend istream& operator>&g…
下列是<C++primer>书中介绍和使用的Sales_item.h类 经测试可以使用,现在贴在这里,分享给大家! 版本一: #ifndef SALESITEM_H#define SALESITEM_H#include <iostream>#include <string> class Sales_item{public: Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0…
C++primer(第五版)1.51练习章节需要有一个Sales_item类,但是给的网站找不到,直接复制下面就好咯: #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string> class Sales_item { public: Sales_item(),revenue(0.0){} Sales_item(std::istream &is){ is >> *thi…
刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内容,结合自己曾经所学所用,很多地方都想得更深了.结合C++11,也有很多新的发现.人就是在不断否定过去的自己中成熟的. 以下是书的第2章,变量和基本类型,的一些笔记. 一.基本内置类型 基本数据类型包括算数类型(arithmetic type)和空类型(void). 书中列出了每种类型的最小存储空间,在不同机…
1. 命名规范 2. 代码格式 3. QString的判断 4. 对象的判空 5. 隐式接口&显式接口 6. vector&string 7. static 8. const 9. volatile 10. for&while 11. register 12. extern 13. struct 14. explicit 15. typedef&using 命名规范 类命名规范:首字母大写,和本程序密切相关的类(非可重用类),类名前要加上一个特定的大写字母(初步决定为此程序…
1.constexpr变量:声明为constexpr的变量一定是一个常量,新标准允许定义一种特殊的constexpr函数使得编译时就可计算结果,这样就能用constexpr函数去初始化constexpr变量. 2.类型别名:1.typedef     2.using SI = Sales_item;  //SI是Sales_item的别名声明,把等号左侧的名字规定成等号右侧类型的别名 3.auto:auto让编译器通过初始值来推算变量类型.auto i = 0, *p = &i; //ok  …
#include <iostream> #include "Sales_item.h" int main() { Sales_item item1, item2; std::cin >> item1 >> item2; if (item1.isbn() == item2.isbn()) { std::cout << item1 + item2 << std::endl; ; }else { std::cerr <<…
//Sales_item.h#ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include<string> class Sales_item { public: std::istream &input(std::istream & in); std::ostream & output(std::ostream & out)const; double avg_price() co…
一.重载输入操作符的要点: 1.返回值为istream &. 2.第一个参数为istream &in. 3.第二个参数为自定义类型的引用对象(例如Sales_Item &item). 二.重载输出操作符的要点: 1.返回值为ostream &. 2.第一个参数为ostream &. 3.第二个参数为自定义类的引用对象(例如const Sales_Item &item). 三.代码片段如下: class Sales_Item { //注意:形参为引用时,实参和…
1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作符:返回值是本类的引用类型,参数类型是所属类的类型,且参数是一个const引用. 作用与复制构造函数相同. 其声明如下:   Sales_item& operator=(const Sales_item& rig);  3.什么情况下需要我们自己实现复制构造函数和赋值操作符? 一般情况下,C+…
一.String对象 1.string s;      s.size(); //返回的是s中字符的个数,也是s的长度: //string对象最后没有加空字符 //size()返回的是string::size_type类型,也就是unsigned类型,而不是int类型 2.两个string对象的相加 string标准库中重载了"+"运算符: string s1("hollo"); string s2("world"); string s3=s1+s…
<C++ Primer 4th>读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码.泛型编程与面向对象编程一样,都依赖于某种形式的多态性. 面向对象编程中的多态性在运行时应用于存在继承关系的类.我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异. 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型.一个类或一个函数可以用来操纵多种类型的对象. 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性. 模板是泛型…
<C++ Primer 4th>读书笔记 面向对象编程基于三个基本概念:数据抽象.继承和动态绑定.在 C++ 中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:能够容易地定义与其他类相似但又不相同的新类,能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程(Object-oriented programming,OOP)与这种应用非常匹配.通…
<C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales_item&, const Sales_item&); 声明了加号操作符,可用于将两个 Sales_item 对象“相加”并获得一个 Sales_item 对象的副本. 不能重载的操作符 :: .* . ?: 通过连接其他合法符号可以创建新的操作符.例如,定义一个 operator**以提供求…
<C++ Primer 4th>读书笔记 在 C++ 中,用类来定义自己的抽象数据类型(abstract data types).通过定义类型来对应所要解决的问题中的各种概念.最简单地说,类就是定义了一个新的类型和一个新作用域. 所有成员必须在类的内部声明,一旦类定义完成后,就没有任何方式可以增加成员了. 构造函数一般就使用一个构造函数初始化列表,来初始化对象的数据成员: // default constructor needed to initialize members of built-…
<C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛型算法:因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 标准算法固有地独立于类型,与容器的类型无关:在前面的描述中,没有任何内容依赖于容器类型.这种算法只在一点上…
<C++ Primer 4th>读书笔记 顺序容器内的元素按其位置存储和访问.容器类共享公共的接口,每种容器类型提供一组不同的时间和功能折衷方案.通常不需要修改代码,只需改变类型声明,用一种容器类型替代另一种容器类型,就可以优化程序的性能. 标准库定义了三种顺序容器类型:vector.list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”).它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价.标准库还提供了三种容器适配器(adap…
介绍Inner Join(可以省略Inner,平常经常inner,就是inner join), Full Out Join,Cross Join,Left Join, Right Join区别. )) , 'Craig') , 'John Doe') , 'Jane Doe') )) , 'Camera') , 'Computer') , 'Monitor') , 'Printer') Customers 表数据: Sales 表数据:1.inner join 两边都有的才筛选出来(Inner…
下列语句定义了5个变量: int count; double sales_price,sum; std::string title; Sales_item bookItem; 每个定义都是以类型说明符开始,如上int.double.std::string.Sales_item都是类型名,其中int和doubleshi是内置类型,std::string是标准库定义的类型(需要#include <string>), Sales_item是自定义类型. ::作用域操作符,含义是右操作符的名字可以在左…
操作符如关系操作符,全局函数的话,必须第一个是class. 1.赋值(=),下标([ ]),调用(())和成员访问箭头(->)等操作符必须定义为成员,如果定义为非成员的话,程序在编译的时候,会发生错误. 2.和赋值操作符一样,复合赋值操作符通常定义为成员.与赋值操作符不同的是,不一定飞的这样做,如果定义为非成员,编译器不会报告错误. 3.改变对象状态或者与给定类型紧密联系的其他一些操作符,入自增,自减和解引用,通常定义为类成员 4.对称的操作符,for example:算数操作符.相等操作符.关…
第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常量:每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型, 由单引号括起来的一个字符是char型字面值,有双引号括起来的零个或者多个字符则构成字符串字面值: 20  整形字面值 ‘a’ 字符字面值 “Hello World”或者“”都会字符串字面值 ‘A’表示单独字符A,而“A”…
一.vector的基本概念 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的.使用vector之前,必须包含相应的头文件. #include<vector> usingstd::vector; vector是一个类模板(classtemplate),这个类和函数定义可用于不同的数据类型上.因此,我们可以定义保存strin…
#include <iostream>#include <string>#include <vector>//#include <cctype>#include <cstring>//#include "Sales_item.h" using namespace std; //把vector中的string对象导入到字符指针数组中int main(){ vector<string> svec; string str…
14章 操作符重载和转换 重载操作符是具有特殊名称的函数:保留字operator后接需要定义的操作符符号. 1.重载的操作符名: + – * / % ^ & | ~ ! , = <  >  <= >= ++ – << >> == != && ||等 不能重载的操作符:     ::    *  . ? 2. 重载操作符 必须具有一个类类型操作数. int operator+(int,int) ;//error : cannot def…
第十三章 复制控制:(copy control) 复制构造函数(copy constructor) 复制操作符(assignment operator) ps: 什么时候需要显示的定义复制控制操作:类具有指针成员,一般情况使用默认的复制控制          有的类 需要禁止复制构造函数, iostream类就不允许复制         类必须显示的声明其复制构造函数为private 最佳实践: 一般来说,最好显示或隐式定义默认构造函数和复制构造函数,只有不存在其他构造函数是才合成默认构造函数,…
在编写C++程序的时候,我们会为特定某一类对象申明类类型,几乎我们申明的每一个class都会有一个或多个构造函数.一个析构函数.一个赋值运算符重载=.以及拷贝构造函数.这些函数控制着类对象的基础操作,确保新定义的对象的初始化.完成对象撤销时的清理工作.赋予对象新值.如果这些函数的操作出错,则会导致严重的后果,所以确保这些函数的操作行为正常是非常重要的. 一.编译器默认生成的函数 如果我们编写一个空类,编译器会为我们默认生成构造函数.析构函数.赋值运算符.拷贝构造函数. 例如当我们定义 class…
标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它被称为容器. 要想使用vector,必须包含适当的头文件.#include<vector> C++语言既有类模板,也有函数模板 ,其中vector是一个类模板. 模板本身不是类或函数,相反可以将模板看作为编译器生成类或者函数编写的一份说明.编译器根据模板创建类或函数的过程成为实例化,当使用模板时,需要指出编译器应把类或函数实例化为何…
标准库类型string 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件.作为标准库的一部分,string定义在命名空间std中.接下来的示例都假定了已包含了下述代码: #include <string> using std::string; 本节描述最常用的string操作. 定义和初始化string对象 如何初始化类的对象是由类本身决定的.一个类可以定义很多种初始化对象的方式,只不过这些方式之间必须有所区别:或者是初始值的数量有所区别,或者是初…
第一章 1.包含来自标准库的头文件用<>,不属于标准库用"". 2.默认情况,读cin会刷新cout:程序非正常终止时也会刷新cout. 3.默认情况,cerr不缓冲,cerr通常用于输出错误信息或其他不属于程序正常逻辑的输出内容. 4.默认情况,clog缓冲,clog通常用于报告程序的执行信息,存入一个日志文件中. 第二章 1.算术表达不要用char,char在一些机器上是有符号的,在一些机器上是无符号的:如要使用一个不大的整数,明确指定是signed char还是uns…