C++primer一二章笔记

《 C++primer》一二章笔记


第1章:开始

编写简单的C++程序,包含一个主函数main
代码如下(示例):

int main()
{
return 0;
}

函数包括:返回类型、函数名、形参列表、函数体
本例中,()中为空的,所以形参没有
1.2初始输入输出
输入输出:iostream库
cin 标准输入;cout 标准输出
cerr 输出警告和错误信息;clog 输出程序运行一般性文件
1.3注释简介
//注释掉整行
/* */注释掉这中间
注释界定符不能嵌套
1.4控制流
while for if
1.5类简介
第一章只是讲解了怎么使用一个类,在后续章节中再学习更详细的定义与使用

第2章 变量和基本数据类型

2.1基本内置类型
算术类型
表格:C++的算术类型
有符号数和无符号数
2.1.2类型转换
主要会用到的还是bool型的和非bool型的转换
对于无符号数和有符号数切记不要混用
当我们赋值给无符号数一个大于它范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
2.1.3字面值常量
‘a’//字符字面值
“Hello World!”//字符串字面值,每个字符串结尾添加一个空字符’\0’
转义序列
指定字面值的类型
表2.2指定字面值类型,可以通过加前缀或者后缀改变类型

2.2变量
int sum=0,value;
在对象创建时获得了一个特定的值,这个对象就是被初始化了。

int units_sold=0;
int units_sold={0};
int units_sold{0};
int units_sold(0);

用花括号初始化的形式被称为列表初始化
默认初始化
定义变量时没有指定初值
内置类型的变量未被显式初始化,它的值由定义的位置决定。
定义于函数体之外的被初始化为0,定义于函数体之内的不被初始化,以其他形式访问或者拷贝就会报错

2.2.2变量的声明和定义
声明使得名字为程序所知,一个文件使用再别处定义的名字就必须包含对那个名字的声明
extern int i;声明而非定义i;
int j;声明并定义j;
extern double pi=3.14//显式初始化了,这个地方就变成了定义,在函数体内部初始化extern声明的变量都会报错
变量只能被定义一次,但可以多次声明
2.2.3标识符
定义与所实现功能尽量相关的名字
2.2.4名字的作用域
全局作用域、块作用域
嵌套的作用域:内层作用域、外层作用域
2.3复合类型
引用和指针
引用:给一个对象起一个新的名字
int ival=1024;
int &refVal=ival;//refVal和ival都=1024
指针:指向另一种类型
int *ip1;ip1是指向int型对象的指针
int *p=&ival;p存放ival的地址

double *pd=&dval;
double *pd2=pd;

利用指针访问对象
int ival=42;
int *p=&ival;
cout<<*p;//输出为42
空指针

int *p1=nullptr;//等价于 int *p1=0;
int *p2=0;
int *p3=NULL;

建议:要初始化所有指针
Void* 指针
可存放任意对象的地址
2.3.3理解复合类型的声明
int i=1024,p=&i,&r=i;//i是一个int型的数,p是一个int型的指针,r是一个int型的引用。
int
p1,p2;//p1是一个int型的指针,p2是一个int型的数
指向指针的指针,指向指针的引用,用到再记忆把
2.4const限定符
必须要初始化

Const的引用 
Const int ci=1024;
const int &r1=ci;//引用及其对应的对象都是常量

2.5处理类型
类型别名

typedef double wages;//wages是double的同义词
using SI=Sales_item;//SI是Sales_item的同义词

指向某个类型别名指代的是符合类型或者常量

typedef char *pstring;
Const pstring cstr=0;//cstr是指向char的常量指针

注:不能把pstring替换成原来的样子来理解
const char *cstr=0;//是对const pstring cstr 的错误理解
前者声明了一个指向char的常量指针,改写后声明了一个指向const char的指针
(前者指针是常量,后者字符串是常量)
auto 类型说明符

auto item=val1+val2;//item初始化为两者相加的结果
auto sz=0,pi=3.14;//错误:sz和pi的类型不一致

decltype类型指示符
decltype(f()) sum=x;//sum的类型就是函数f的返回类型
2.6自定义数据结构
使用的是结构体struct
编写自己的头文件,一般是将那些只能被定义一次的实体。
预处理器
#define指令把一个名字设定为预处理变量
#ifdef当且仅当变量已定义时为真
#ifndef当且仅当变量未定义时为真
检测结果为真时后续操作执行到#endif

练习题

1.20

#include<iostream>
#include "Sales_item.h"
int main()
{
    Sales_item book;
    std::cout << "请输入销售记录:";
    while (std::cin >> book)
        std::cout <<"IBSN、售出本数、销售额和平均售价为"<< book << std::endl;
    system("pause");
    return 0;
}

1.21

#include<iostream>
#include "Sales_item.h"
int main()
{
    Sales_item book1;
    Sales_item book2;
    std::cout << "请输入销售记录:";
    std::cin >> book1 >> book2;
        if(book1.isbn()==book2.isbn())
        std::cout <<"汇总IBSN、售出本数、销售额和平均售价为"<< book1+book2<< std::endl;
    system("pause");
    return 0;
}

1.22

#include<iostream>
#include "Sales_item.h"

int main()
{
    Sales_item book1, book2;
    std::cin >> book1;
    while (std::cin>>book2)
    {
        if (book1.isbn() == book2.isbn())
            book1 = book1 + book2;
    }
    std::cout << book1 << std::endl;
    return 0;
}

1.23

#include<iostream>
#include "Sales_item.h"

int main()
{
    Sales_item book1, book2;
    int a=1;
    
    if (std::cin >> book1)
    {
        while (std::cin >> book2)
        {
            if (compareIsbn(book1,book2))
                a++;
            else
            {
                std::cout << book1.isbn() << "共有" << a << "条销售记录" << std::endl;
                book1 = book2;
                a = 1;
            }
            std::cout << book1.isbn() << "共有" << a << "条销售记录" << std::endl;
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值