C++学习day--03 字符串常量和打印函数、命名空间

1、什么是常量?

什么是字符串? 什么时候需要使用字符串?
微信聊天、QQ 聊天,使用的都是字符串
字符串常量:内容永远不会发生变化的字符串
字符串常量:用半角(英文输入法)双引号 " " 括起来的串。

如下都是字符串常量:

"你爱我吗"
"I love you."
std::cout << “我的战斗力是” << 10000;
“我的战斗力是” 是字符串常量 。10000 是 整数常量
std::cout << “9527”<<“的年龄是” << 38;
“9527” 是字符串常量 ,38 是 整数常量
常量和变量的区别?
常量:在程序整个运行期间,值不会发生任何变化。
变量:在程序整个运行期间,值随时可以发生变化。
疑问:
字符串的存储方式? 除了字符串常量,还有哪些其他类型的常量? 变量又如何使用? 【在后续课程中详细讲解】,不要急,到这里你可能会有很多疑问,后续课程会慢慢解答。

 

2、让计算机说话:cout和printf 

沉默不是金,爱需要表达。暗恋永远不会有结果。“打印”是计算机最原始的表达方式。
C++风格的打印:
实例:
std::cout << “ 你好! Rock.” ;
std::cout << “ 你好! Rock.” << std::endl;
std::cout << std::endl;
std::cout <<” 工资 : “ << 30000;
std::cout <<” 工资 : 30000“;
std::cout << 3.1415;
使用要求:
需要包含头文件 #include <iostream> 注意不是#include <iostream.h>, 有后缀.h的C语言的头文件风格,C++没有后缀.h。但是早期的C++是支持后缀有.h的头文件。
std 是一个命名空间(下一节详细讲解) ,cout 是 std 命名空间内的一个“对象”。 endl 也是 std 命名空间内的一个对象,用来表示“回车符”(换到下一行的最前面) 。这里扩展一下回车符:
在C语言中,我们平时打印数据都喜欢加一个 '\n'来换行,其实严格来说,不是换行,而是回车换行 ,那么回车和换行有什么区别?
回车:只是把光标定位到当前行的第一个位置,即最前面,而不会换行,C语言中'\r'就是回车。如果在本行使用'\r',旧的内容会被新的内容覆盖!
 
关于\r具体用法,大家可自行找资料看看,回车和换行的字符在不同操作系统有所不同。但这不是我们关心的重点。
对象:先简单的理解为一个具体的实体。
(在后续视频中,会详细介绍 C++ 面向对象的概念)
std::cout << ,相当于调用了一个特殊的函数(但不是函数),用来打印数据。
std::cout << "你好! " << "Rock!"; 等效于:
std::cout << " 你好! ";
std::cout << "Rock!";
std::cout, 可以连续输出任意多个数据,中间用 << 隔开。

 C风格的打印:

实例:
printf(“ 你好! Rock”);
printf(“ 你好! Rock\n”);
printf(“\n”);
printf(“ 工资 :30000”);
printf(“ 工资 :%d”, 30000);
printf(“ 工资 :%d 年假: %d”, 30000, 12);
printf(“%f”, 3.1415);
printf(“ 圆周率: %f”, 3.1415);
说明 :
1. 占位符的使用
2. %d 整数
%f 浮点数(带小数部分的数据)
使用要求:
需要包含头文件 #include <stdio.h>
特别注意:
std::cout printf 还有很多用法,现在只需要掌握以上最常用的用法,其他的用法现在不需要关注。 其他用法在后续课程中,需要时再讲解。 打印语句的使用场合,打印’常常指:把信息输出到“标准输出设备”(标准输出设备,就是显示器中的“终端”)。
1. 控制台应用程序的输出
2. 程序调试 Bug 的重要手段
讨论:
std 是一个命名空间,那么什么是命名空间?

3、命名空间:

命名空间有什么用?命名空间是C++ 为了避免名字冲突而引入的

 用法1:

#include <iostream>
#include <string>
namespace China {
float population = 14.1; // 单位 : 亿
std::string capital = " 北京 " ;
}
namespace Japan {
float population = 1.27; // 单位 : 亿
std::string capital = " 东京 " ;
}
using namespace Japan;
int main( void ) {
std::cout << " 首都 :" << capital << std::endl;
std::cout << " 人口 :" << population << std::endl;
std::cout << " 首都 :" << China::capital << std::endl;
std::cout << " 人口 :" << China::population << std::endl;
system( "pause" );
return 0;
}

 人口population和首都capital这两个变量定义了两次,一个表示中国,一个表示日本的。那么在使用这两个变量的时候怎么区分呢?这时就引入命名空间China表示在里面的变量都是属于中国这个范围的,Japan里面的变量都是属于日本的。

怎么使用命名空间?

using namespace 空间名字,如using namespace Japan;应用空间以后,以后出现同名的变量默认都是使用Japan这个命名空间里的。所以本案例前两个都是打印日本的信息。如果要使用除了Japan里的其它人口数,就要在这个变量前加上

空间名::population

:: 表示引用的意思。本案例最后两行就是打印中国的信息。

用法2:

#include <iostream>
#include <string>
namespace China {
float population = 14.1; // 单位 : 亿
std::string capital = " 北京 " ;
}
namespace Japan {
float population = 1.27; // 单位 : 亿
std::string capital = " 东京 " ;
}
// 注意:没有 namespace
// 直接指定命名空间中的标识符,而不是整个域名
using China::capital;
using Japan::population;
int main( void ) {
std::cout << " 首都 :" << capital << std::endl;
std::cout << " 人口 :" << population << std::endl;
system( "pause" );
return 0;
}

本案例是打印中国的首都,人本的人口。

用法3:

#include <iostream>
#include <string>
namespace China {
float population = 14.1; // 单位 : 亿
std::string capital = " 北京 " ;
}
namespace Japan {
float population = 1.27; // 单位 : 亿
std::string capital = " 东京 " ;
}
using namespace China;
using Japan::population;
int main( void ) {
std::cout << " 首都 :" << capital << std::endl;
std::cout << " 人口 :" << population << std::endl; // 出错!
system( "pause" );
return 0;
}

这个代码有错误。 错误提示: population”: 不明确的符号,为什么?

因为你前面使用using namespace China;说明后面代码出现的capital和population都是中国的信息,但是现在又引入using Japan::population; 说明后面出现的population都是日本的信息,导致产生歧义。因此这种引入命名空间是错误的引入。即不能应用有重复的成员,否则会出错。

解决方案:

引入的时候不能产生歧义,即引入的空间不能有重复的变量,要使用别的空间里的变量,用指定完整的域名,如(Japan::population )来表示。
using namespace China;
int main(){
std::cout << " 首都 :" << capital << std::endl;//中国的首都

std::cout << " 人口 :" << Japan:: population << std::endl; //日本的人口
system( "pause" );
return 0;
}

 标准的命名空间:using namespace std;这个先不着急弄懂它,后面自然会讲解。

4、C++程序的编译过程

使用 vs, 只需单击一下,就把源代码转换成“软件”。

 背后实际经历了一下 4 个处理阶段:

 4、程序的注释:

为什么要注释?

先看一个例子,你能看懂该变量名代表的含义吗?

int fsgl;

只能通过后面的代码来推敲这个变量的含义,后面才发现,它的意思是:发射功率。不写注释基本猜不到是这个意思,由此可见注释的重要性。如果一个代码当时没有写注释,不是因为懒,而是觉得自己的代码既高效又可读。 但是两个月以后...不可能就不知道你写的是什么。。

使用注释的要点:

注释的目的: 为了让程序更方便阅读(“可读”),以便于维护。
需要注释的内容:
1. 重要变量名的作用(用来表示什么)
2. 比较复杂的算法思想
3. 程序中的关键步骤
注释的方式:
有两种注释方式
C++注释风格:
1. 单行注释 //
在行尾,或代码的上一行
在代码的下一行也可以,但很少有人这么做。

C语言注释风格: 

2. 多行注释 /* */
不支持嵌套。
3. 不要为了注释而注释!
过多的注释,反而有害!会把真正需要注意的东西淹没。
......
int i; // 定义了一个变量 i,这里写注释完全没必要
......
注释的风格:
函数的注释,有特别的“姿势”,可以让代码显得更规范。
1. 在行尾注释 使用 // 注释
2. 在代码的上一行使用 // 注释
3. 多方内容的注释,使用 /* */
4. 函数的注释
具体方法,在函数部分再详细讲解。
良好的注释风格,是一个程序员的基本修养

5、初学者常见的错误 :

错误 1:VS 的中文乱码问题:
VS 最知名的错误 ( 被程序员吐槽最多的 BUG) 。 VS 支持多种中文编码,但是使用不当时,常常导致中文乱码,而且难以解决。 中文乱码的原因:
1. 中文在不同编码格式下 , 存储的方式不一样 .
2. 如果程序是 A 编码方式编译运行的 , 但是控制台却是以 B 编码方式来显示 , 就会出现乱码 .
3. vs 的控制台默认编码是 GB2312, 编号号是 836
注意 :GBK 编码是兼容 GB2312 , 一般描述 GBK 常常就是指 BG2312 如果源代码文件的编码如果是其他编码格式, 就会导致中文乱码 . 正常场景:
vs 中新建文件时,该文件默认都是 GB2312 编码. 因为控制台默认也是 GB2312 编码,所以一般情况下,都不会出现中文乱码 .
错误场景:
1. 直接在项目中导入了其他已经创建好的源代码文件 , 如果该文件不是 BG2312 编码 , 而且含有中文的话 , 就必定会出现中文乱码 .
2. 从其他文件中复制代码到 vs 的文件中 , 也可能导致编码错乱 .
3. 网络编程中, 和服务器交互通信, 两端的编码很可能不同.本项目黑客攻击系统就会用到
解决方案一: 修改文件的编码(最常用)
修改源代码文件的 编码格式 ”, 使其和控制台的编码格式保持一致 . 代码文件的编码格式, 可以通过 vs 很方便的修改 : 先用 vs 打开对应的文件 , 然后如下操作 :

 

 然后:

解决方案二: 强制指定文件执行
不修改文件的编码 , 而是直接指定程序执行时使用的编码 , 使其和运行程序的控制台的编码一致.但是这种方式用的不多 。因为有的平台不支持这种用法,且记忆困难
#pragma execution_character_set( "gbk" )
解决方案三: 修改控制台的编码格式
修改 vs 控制台的编码 , 使其和源代码的编码保持一致 . 修改注册表, 可以修改控制台的编码格式 .
注意 : 不建议使用该方式.因为, 把控制台的默认编码改为其他编码后, 在该控制台输入中文, 很可能导致输入的中文 无法识别. 在 vs2010 中存在该问题
解决方案四: 对数据进行编码转换
适用于 : 服务器端和客户端 , 或多个客户端之间的编码不一致时 .本黑客攻击项目就用的这种方法。
1) 收到对方的其他编码数据时 , 先使用特定的接口来进行编码转换 .
2) 发送本地数据给对方之前 , 先使用特定的接口来进行编码转换 .

错误 2:代码正确,但是无法通过编译
代码看不出错误,而且报错信息莫名其妙,则很可能是因为代码使用全角字符方式输入的。
特别是各种符号,比如双引号,圆括号,分号等。
解决方案:
1. 把原来的部分代码删除,切换到半角输入方式,再重新输入。
2. 使用搜狗输入法的“中文时使用英文标点”功能,可以避免因为中英文切换导致的全角
符号错误!
1 )打开任意编辑器,比如记事本或 word 等,并把光标定位到该编辑器内。
2 )同时按下 ctrl + shift + m + o 四个按键,以弹出搜狗工具箱:

 单击工具箱(如上图所示):

在单击“属性设置”,勾选“中文时使用英文标点”

 

建议: 安装两种中文输入法.
写代码时, 切换到搜狗输入法.(要求按以上要求配置搜狗输入法)
其他情况下, 使用另一个中文输入法(比如 QQ 拼音输入法)
其他错误:
LINK : fatal error LNK1561: 必须定义入口点 ,原因: 没有 main 函数 ,或者 main 函数的 main 写错了。

6、计算机英语加油站:

IT 编程中 , 英语学习的误区 .
1) 误区 1: 不懂英语 , 不能学编程
2) 误区 2: 完全不需要英语
实际要求 :
认识最基本的英文单词即可 . ( 总计几百个 )
IDE
集成开发环境
fatal error
fatal 致命的
error 错误
fatal error 致命的错误
main
主要的
include
包含
io
input 输入
output 输出
input output 输入输出
io 输入输出的简写
stream
iostream 输入输出流
system
系统
system() 函数 , 用来执行控制台的各种命令
例如 :
system( "pause");
system("ping www.baidu.com");
return
返回
void
, 空的
int
整数类型
windows
窗口
pause
暂停
print
打印
printf C 语言的输出语句
cout
console 控制台
output 输出
console output 控制台输出
cin
console 控制台
input 输入
console input 控制台输入
cin ”console input” 的简写
endl
endl
end 结束
line
endl 行结束符 ( 回车换行 )
debug
调试
release
发布
use
使用
using : use 的分词形式 , “ 正在使用
namespace
name 名称
space 空间
namespace 命名空间
注意 : 可以使用 vs 的智能提示 ( ctrl + j ),常用,记一下这个快捷键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值