对象、类型和值 笔记(一)

为了读取某些东西,我们需要从某个地方读入;我们需要在计算机内存中的某个地方放置读取的东西。这样一个“地方”称为一个对象。
一个对象是一个具有某种类型的存储区域。一个有名字的对象称为一个变量。
对象:用来存储数据的“位置”。

类型用来指定可以放置什么样的信息。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }int main()
{cout << "Please enter your first name(followed by'enter':\n";string first_name;        //first_name为字符串名的变量cin >> first_name;     //读取字符串到first_namecout << "Hello," << first_name << "!\n";
}

main中第一行简单地输出一条信息,提示用户输入一个名字,这个信息通常被称为一个提示信息。
接下来几行定义了一个名为first_name的string变量。
读入键盘输入到该变量。
输出一个欢迎词。
string first_name; 这行会划分一个字符串的内存区域,并将它命名为first_name。

cin读做“see-in”,“chapter input”的缩写。
其中>>为操作符,get from。指定输入到哪里。
换行是有必要的,用来引起计算机的注意,直到输入下一个换行,计算机才会收集这些字符,按下回车键之前可以修改、删除。这个换行不会保存在内存中成为字符串的一部分。

cout << “Hello,” << first_name << “!\n”; 注意:我们使用引号来表示字符串字面值,当不使用引号时,输出的是名字所对应的值。

变量

我们需要使用一个名字来访问一个对象。一个命名后的对象被称为一个变量
变量有特定的类型(int、string…),类型决定我们将什么赋给对象以及可使用的操作。我们赋给变量的数据项被称为
一个用来定义变量的语句被称为“定义”。
我们不能把错误类型的值赋给一个变量。编译器会记录每个变量的类型并确保对它的使用与定义它时的类型一致。

int:整数
double:浮点数
char:单个字符,比如 ’ . '。单引号限定的单个字符。
string:字符串,在双引号中的一串字符。
bool:逻辑变量,比如bool tap_on = true

double是双精度浮点的简写,浮点是数学概念上的一个实数在计算机中的近似值。

输入和类型

输入操作>>(“get from”)对类型敏感。读取的值与变量类型需一致。

//读取名字和年龄
int main()
{cout << "Please enter your name and age\n";string first_name; //字符串变量int age;           //整型变量cin >> first_name; //读入一个字符串cin >> age;        //读入一个整数cout << "Hello,"<<first_name<<"(age"<<age<<")/n";
}

如果你输入LI 22,>>将LI读入first_name,将22读入age,并且生成以下输出:
Hello,LI (age 22)

如果你输入22 LI呢?,这时候的输出将为22 和一个随机数,22会被当成字符串读入first_name,而LI不是一个整数则不会被读取,而我们没有给age赋初值,也没有成功读入一个数存进它,因此就会得到内存中某个部分的“垃圾值”。

现在我们可以初始化age,这样在输入错误时我们可以得到一个可预测的值。

//读取名字和年龄
int main()
{cout << "Please enter your name and age\n";string first_name="???"; //字符串变量//???表示“不知道名字”int age=-1;           //整型变量,-1表示不知道年龄cin >> first_name>>age; //读入字符串和整数cout << "Hello,"<<first_name<<"(age"<<age<<")/n";
}

现在输入22 LI,则会得到 Hello,22(age -1)

此外,计算机不将LI 22全部读入first_name是因为按照规定,读取字符串会被空白符所终止,包括空格、换行符和tab字符。空格在默认情况下会被>>忽略,若在读取的数字之前添加任意多空格,>>将会跳过它们并读取这个数字。使用>>的字符串读取缺省情况会被空格终止:它只能读取一个单词。解决办法可以是:

int main()
{cout << "Please enter your first and second names\n";string first; //字符串变量string second;cin >> first>>second;  //读取2个字符串cout << "Hello,"<<first<<" "<<second<<'\n';
}

运算和运算符

指定什么值可以存储在一个变量中,变量类型决定我们可以对它进行什么运算以及它们意味着什么。

string s2 = name + "Jr.";    //+代表追加字符串
int c3 = count - 2 //- 是指整数相减
string s3 = name - "Jr."  //错误:对于字符串来说减号是未定义的

=:赋值,==:等于
sqrt(n),n的平方根。
其中int运算符包含余数(模),而double浮点型没有该运算符,int有余数并赋值(%=),而double没有。

string name=first+’ '+second; //字符串连接
字符串+意味着连接。

字符串比较也特别有用

//读入并比较两个名字
int main()
{cout<<"Please enter two names\n";string first;string second;cin>>first>>second;//读入两个字符串if (first==second)cout<<"That's the same name twice.";if (first<second)cout<<first<<"is alphabetically before"<<second<<'\n';if (first>second)cout<<first<<"is alphabetically after"<<second<<'\n';
}

赋值和初始化

初始化:给一个变量它的初值
赋值:给一个变量一个新的值
两者在逻辑上是不同的,初始化变量为“空”,赋值在放入一个新的值前需要将旧的值清空。当我们想将一个新的值放入,赋值是必须的。

实例:检测重复单词

int main()
{string previous=' ';//前一个单词,初始化为“不是一个单词”//这里" "只包含一个空格字符string current;  //当前单词while (cin>>current)   //读入单词流{if(previous==current)  //检测当前单词是否和前一个相同cout<<"repeated word:"<<current<<'/n';previous=current;}
}

while的意思,当输入操作cin>>current成功的情况下,(cin>>current)后面的语句将反复执行。
注意:对于一个string,>>读取的是用空格分开的单词,可以通过给程序一个终止输入符号(通常是文件结尾)来终止这个循环。

复合赋值运算符

一个变量的递加(+1)在程序中很常用,有一个特定的语法比如:
++counter
表示:counter=counter+1
C++直接支持这些运算:
a+=7 ; //a= a+7
b-=9; // b= b-9
c*=2; //c=c*2
在很多应用领域=和/=被认为是“缩放”

2021-04-05 c++程序设计原理与实践持续学习笔记:第三章对象、类型和值。相关推荐

  1. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第三章:类和对象进阶(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter 3:类和对象进阶 $3.1构造函数 $3.1.1 构造函数的概念和作用     全局变量在程序装入内存时就已经分配好了存储空间,程序 ...

  2. 《浏览器工作原理与实践》学习笔记

    浏览器原理 前言 本文是学习李兵老师的<浏览器工作原理与实践>过程中记录笔记,详细链接见文末 进程vs线程 进程:一个应用程序的运行实例就是一个进程,详细来说就是:启动一个应用程序的时候, ...

  3. python第三章上机实践_《机器学习Python实践》读书笔记-第三章

    <机器学习Python实践>,第三章,第一个机器学习项目 以往目录:橘猫吃不胖:<机器学习Python实践>读书笔记-第一章​zhuanlan.zhihu.com 书中介绍了一 ...

  4. 《C++程序设计原理与实践》读书笔记(二)

    C++语言提供了一些内置的类型,如char.int和double.对于一个类型,如果编译器无须借助程序员在源码中提供的任何声明,就知道如何表示这种类型的对象以及可以对它进行什么样的运算,我们就称这种类 ...

  5. C++程序设计原理与实践 习题答案 第二十六章 第26章习题答案

    第二十六章:测试 习题答案 本章的BinarySearch Binary_Search.h 26.2 26.2 测试集 26.3 26.4 26.5 26.8 and 26.9 26.8 测试集 26 ...

  6. C++程序设计原理与实践 习题答案 第十五章 第15章习题答案

    第十五章:容器和迭代器 习题答案 Document 本章的文本编辑器实现,添加了一些功能 Document.h Document.cpp main.cpp 测试 List_Circular.h 我自己 ...

  7. C++程序设计原理与实践 习题答案 第十六章 第16章习题答案

    第十六章:算法和映射 习题答案 16.3 and 16.4, count, count_if 16.5 16.6 16.7 Binary Search 16.8 word frequency 16.9 ...

  8. 《计算机图形学原理及实践》学习笔记之第十章

    第十章 2D 变换 线性变换: 对于 2D 空间: T:R2−>R2T:R^2 -> R^2T:R2−>R2 R2R^2R2 表示二维空间,及一个二维空间向量 或 点经过线性变换仍是 ...

  9. 计算机安全原理与实践_《计算机图形学原理及实践》学习笔记之第三章

    第三章 一个古老的绘制器 1525年,阿尔布雷·丢勒 制作了一幅木刻画,展示了一种可以绘制任一形体透视图的方法. 本章我们将开发一个软件来模拟丢勒展示的方法. 丢勒视角绘制算法的伪代码 Input: ...

最新文章

  1. 对应到对象 数据库驼峰_【GI的自主空间数据库】一种竞争力,叫技术引领;一种竞争力,叫时间沉淀...
  2. hadoop错误,重新格式化namenode后,出现java.io.IOException Incompatible clusterIDs
  3. 4·24 dene2004's cnBlog 启 SP1
  4. rest-framework url控制
  5. LeetCode-动态规划基础题-343. 整数拆分
  6. linux硬链接不能创建目录,为什么硬链接不允许用于目录?
  7. 对node.js的net模块的一个测试
  8. jenkins部署三种构建方式的详细步骤
  9. eclipse的SVN插件设置忽略文件
  10. 2019年信息安全工程师备考经验
  11. 从零开始学前端:浮动 --- 今天你学习了吗?(CSS:Day15)
  12. 回顾---对教师提出的5个问题的回答及个人感悟
  13. ospf-3型和5型汇总
  14. Ubuntu录制gif动态图
  15. 网络安全设备-认识运维安全管理与审计系统(堡垒机)
  16. html中的特殊符号表示法
  17. 使用opengl和c++实现迷宫地图的路径搜索和显示(基于DFS)
  18. Word里面的大括号怎么打出来?
  19. char,varchar,nchar,nvarchar的区别
  20. 李志敏 华中农业大学计算机学院,华中农业大学计算机教育论坛举行

热门文章

  1. 论斯芬克司吃人的合理性。
  2. imx6 kernel boog log
  3. Kafka ISR机制
  4. PTA-L1-034微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的
  5. LDA主题模型学习心得
  6. javaScript实现登录(简陋)
  7. 【小西】优化生日品同步网易严选功能,使其支持多SPU对多SKU关系
  8. Google数字图书馆
  9. arduino中Keypad 库函数介绍
  10. 【百度地图】制作多途经点的线路导航,模拟运动 (vue,typescript)