我自己在菜鸟学习时的记录,可以实现网页运行代码,讲的也很流畅,源网址在这里
检索目录
-
- 标准化
- 代码一闪而过的问题所在和解决方法。
- **标识符**
- 为什么要使用 **using namespace std;** ?
- 块注释符(/*...*/)是不可以嵌套使用的。
- 查看所有类型字符的信息
- C++ 中的变量声明
- 变量的类型间是可以互相转换的,转换又分为自动转换和强制转换。
- 定义包含了声明,但是声明不包含定义,如
- 字符常量
- 宏定义 #define 和常量 const 的区别
- 静态局部变量
- C++ [运算符](https://www.runoob.com/cplusplus/cpp-operators.html)
- C++ 中的运算符优先级
- 关于逻辑运算符 && ,|| 的巧用方式
- ? : 运算符
- C++ 数学运算
- C++ 随机数
- 使用随机数来发红包
- Array 直接初始化
- setw控制输出间隔
- **Vector(向量):**
- C++ 中有大量的函数用来操作以 null 结尾的字符串
- 实例
- 字符串
- C++输入
- C++ 中使用指针
- [C++ 日期 & 时间](https://www.runoob.com/cplusplus/cpp-date-time.html)
- 输入输出流中的函数(模板):
- C++ [动态内存](https://www.runoob.com/cplusplus/cpp-dynamic-memory.html)
- [C++ 实例](https://www.runoob.com/cplusplus/cpp-examples.html)
- 欢迎访问我的个人网站 [https://www.josu.top/](https://www.josu.top/)
C++ 简介 | 菜鸟教程C++ 简介 C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的 C,后来在 1983 年更名为 C++。
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
**注意:**使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
- 封装
- 抽象
- 继承
- 多态
标准的 C++ 由三个重要部分组成:
- 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
- C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
- 标准模板库(STL),提供了大量的方法,用于操作数据结构等。
ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac、UNIX、Windows、Alpha 计算机上都能通过编译。
由于 ANSI 标准已稳定使用了很长的时间,所有主要的 C++ 编译器的制造商都支持 ANSI 标准。
学习 C++,关键是要理解概念,而不应过于深究语言的技术细节。
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统。
C++ 支持多种编程风格。您可以使用 Fortran、C、Smalltalk 等任意一种语言的编程风格来编写代码。每种风格都能有效地保证运行时间效率和空间效率。
基本上每个应用程序领域的程序员都有使用 C++。
C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件。
C++ 广泛用于教学和研究。
任何一个使用苹果电脑或 Windows PC 机的用户都在间接地使用 C++,因为这些系统的主要用户接口是使用 C++ 编写的。
标准化
发布时间 | 通称 | 备注 |
---|---|---|
2017 | C++17 | 第五个 C++ 标准 |
2017 | coroutines TS | 协程库扩展 |
2017 | ranges TS | 提供范围机制 |
2017 | library fundamentals TS | 标准库扩展 |
2016 | concurrency TS | 用于并发计算的扩展 |
2015 | concepts TS | 概念库,用于优化编译期信息 |
2015 | TM TS | 事务性内存操作 |
2015 | parallelism TS | 用于并行计算的扩展 |
2015 | filesystem TS | 文件系统 |
2014 | C++14 | 第四个 C++ 标准 |
2011 | - | 十进制浮点数扩展 |
2011 | C++11 | 第三个 C++ 标准 |
2010 | - | 数学函数扩展 |
2007 | C++TR1 | C++ 技术报告:库扩展 |
2006 | - | C++ 性能技术报告 |
2003 | C++03 | 第二个 C++ 标准 |
1998 | C++98 | 第一个 C++ 标准 |
代码一闪而过的问题所在和解决方法。
一闪而过是因为你的程序没有输入,只有固定的输出。程序会在运行到 return 语句时退出程序。
之前给的三种解决办法我一一讲解:
第一种:
cin.clear(); // 清空缓存
cin.sync(); // 清空缓存
cin.get(); // 接收键盘输入
// From:本帖,"但对于太突然"
这种采用了输入方法来不让程序终止,他会在读入到数据后退出程序(cin.get)。
#include <stdio.h>
int main()
{
getchar();
return 0;
}
// From:本帖,"xuezy"
这种是采用了输入方法,但不同于上一种的是,这次是使用 getchar 函数获取一个 char 类型,但不将读入的数据存放于任何变量。
#include <stdlib.h>
int main()
{
system("pause"); //注意:“system("pause")”;语句会显示“请按任意键继续……”
return 0;
}
// From:本帖,"xuezy"
此方法是采用 system() 函数中的 pause 命令进行程序的暂停。
标识符
**定义:**变量、符号常量、函数、数组、类型、文件、标签和其他各种用户定义的对象的名称。
- 第一个字符必须是字母或下划线
- 后续字符可以是字母、数字或下划线
- 标识符的有效长度不超过247字符
- 标识符不能和关键字相同
- 标识符区分大小写
- 最好也不要和系统预定义标识符同名
- 标识符命名要做到“见名知义”
- 应该避免使用可能引起混淆的字母
为什么要使用 using namespace std; ?
有些名字容易冲突,所以会使用命名空间的方式进行区分,具体来说就是加个前缀。比如 C++ 标准库里面定义了 vector 容器,你自己也写了个 vector 类,这样名字就冲突了。于是标准库里的名字都加上 std:: 的前缀,你必须用 std::vector 来引用。同理,你自己的类也可以加个自定义的前缀。
但是经常写全名会很繁琐,所以在没有冲突的情况下你可以偷懒,写一句 using namespace std;,接下去的代码就可以不用写前缀直接写 vector 了。
命名空间(namespace)的意思:
举个例子吧,我们的名字,有很多时候会重名,比如张三。
世界上可能有几十几百个张三。
我们的世界里当然可以用身份证号码来分啦,但在没有身份证的时代怎么分呢?
有办法的,比如,可以在名字前面加上地方名,如
广东的张三
上海的张三
同样的道理,我们在编程时,不同的程序员可能都会喜欢用同样的名字来表示相同的东西,如,大家可能都会用 dog 来表示狗类。好了,现在有好几位程序员都写了 dog 类,可能各自的功能不同或相同。就好比好几家人都养了条狗一样。好了,在程序调用时,编译器傻了,它不知道该拉哪家的狗出来响应呀!
怎么办?哦,让我们在狗前面加上 namespace(名字空间) 以示区分,好了,于是程序中就有了
张三 的 狗
李四 的 狗
啰嗦了一大堆,该说回来了
std::
std 表示是 C++ 的标准命名空间,就是编译系统自带有的,按 C++ 标准定义好了的。
:: 书写格式
比如,在使用输出 std::cout 时,如果它达不到我们想要的效果,我们也可以自己定义一个名字空间。
取名 myspace,再在这个空间里写一个 cout 函数来实现。调用时,就成了 myspace::cout。
块注释符(/…/)是不可以嵌套使用的。
此外,我们还可以使用 #if 0 … #endif 来实现注释,且可以实现嵌套,格式为:
#if 0
code
#endif
你可以把 #if 0 改成 #if 1 来执行 code 的代码。
这种形式对程序调试也可以帮助,测试时使用 #if 1 来执行测试代码,发布后使用 #if 0 来屏蔽测试代码。
#if 后可以是任意的条件语句。
下面的代码如果 condition 条件为 true 执行 code1 ,否则执行 code2。
#if condition
code1
#else
code2
#endif
查看所有类型字符的信息
下面实例会输出您电脑上各种数据类型的大小。
#include<iostream>
#include <limits>
using namespace std;
int main()
{
cout << "type: \t\t" << "************size**************"<< endl;
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
cout << "char: \t\t" << "所占字节数:" << sizeof(char);
cout << "\t最大值:" << (numeric_limits<char>::max)();
cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);
cout << "\t最大值:" << (numeric_limits<signed char>::max)();
cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);
cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);
cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
cout << "int: \t\t" << "所占字节数:" << sizeof(int);
cout << "\t最大值:" << (numeric_limits<int>::max)();
cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);
cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
cout << "long: \t\t" << "所占字节数:" << sizeof(long);
cout << "\t最大值:" << (numeric_limits<long>::max)();
cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);
cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
cout << "double: \t" << "所占字节数:" << sizeof(double);
cout << "\t最大值:" << (numeric_limits<double>::max)();
cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
cout << "long double: \t" << "所占字节数:" << sizeof(long double);
cout << "\t最大值:" << (numeric_limits<long double>::max)();
cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
cout << "float: \t\t" << "所占字节数:" << sizeof(float);
cout << "\t最大值:" << (numeric_limits<float>::max)();
cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);
cout << "\t最大值:" << (numeric_limits<size_t>::max)();
cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;
// << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
cout << "type: \t\t" << "************size**************"<< endl;
return 0;
}
本实例使用了 endl,这将在每一行后插入一个换行符,<< 运算符用于向屏幕传多个值。我们也使用 sizeof() 函数来获取各种数据类型的大小。
当上面的代码被编译和执行时,它会产生以下的结果,结果会根据所使用的计算机而有所不同:
type: ************size**************
bool: 所占字节数:1 最大值:1 最小值:0
char: 所占字节数:1 最大值: 最小值:?
signed char: 所占字节数:1 最大值: 最小值:?
unsigned char: 所占字节数:1 最大值:? 最小值:
wchar_t: 所占字节数:4 最大值:2147483647 最小值:-2147483648
short: 所占字节数:2 最大值:32767 最小值:-32768
int: 所占字节数:4 最大值:2147483647 最小值:-2147483648
unsigned: 所占字节数:4 最大值:4294967295 最小值:0
long: 所占字节数:8 最大值:9223372036854775807 最小值:-9223372036854775808
unsigned long: 所占字节数:8 最大值:18446744073709551615 最小值:0
double: 所占字节数:8 最大值:1.79769e+308 最小值:2.22507e-308
long double: 所占字节数:16 最大值:1.18973e+4932 最小值:3.3621e-4932
float: 所占字节数:4 最大值:3.40282e+38 最小值:1.17549e-38
size_t: 所占字节数:8 最大值:18446744073709551615 最小值:0
string: 所占字节数:24
type: ************size**************
C++ 数据类型、typedef 声明和define的区别、枚举的使用例子
C++ 中的变量声明
变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
尝试下面的实例,其中,变量在头部就已经被声明,但它们是在主函数内被定义和初始化的:
#include <iostream>
using