在这里纪念一下,2022.05.26 Qsiri重返C++编程之路,以此来弥补大学时光荒废的点点滴滴!
- C++最简单的程序
- 头文件包含问题
- 完整代码
- C++命名空间
- 什么是命名空间
- 如何创建命名空间
- 怎么访问命名空间
- 命名空间嵌套
- 先声明后实现
- 标准的命名空间std
- C++函数新思想
- 函数重载
- 什么是函数重载
- 不同参数的三个体现
- 函数缺省
- 什么是函数缺省
- 函数缺省规则
- 缺省的好处
- C++标准输入和输出
- 标准输出
- 标准输入
- 小试牛刀
- 总结
#include//不需要.h 直接包含 int main() { return 0; }
- 创建的项目源文件是.cpp
- 头文件的包含不同
。不需要.h 直接包含
。C语言的标准库头文件
*依然按照原来方式包含,一定程序C++兼容C语言
*C++包含方式: c+原来的头文件,去掉.h
#include
- 自己的写头文件: 按照C语言教的方式包含
#includeC++命名空间 什么是命名空间#include #include #include #include "myhead.h" //自己写的依旧是按照原来方式 int main() { printf("C语言的函数!n"); return 0; }
namespace 空间名
{
//变量
//函数
//结构体
//类
}
//用namespace 声明一个东西
可以提高标识符使用,可以避免命名污染
如何创建命名空间namespace 空间名
{
//变量
//函数
//结构体
//类
}
//用namespace 声明一个东西
怎么访问命名空间
- :: :作用域分辨符
。访问空间中的成员: 空间名::成员名
。用来区分全局变量和局部变量
*::全局变量
#include#include namespace MM { int age = 1; void print() { printf("MMn"); } } namespace Boy { int age = 2; } int g_num = 1001; int main() { printf("%dn", MM::age); printf("%dn", Boy::age); int g_num = 1; printf("全局变量:%dn", ::g_num); return 0; }
- 省略前缀的方式去调用
//using namespace 空间名; //要省略的空间名 //注意点:有作用域 #include命名空间嵌套#include namespace MM { int age = 1; void print() { printf("MMn"); } } namespace Boy { int age = 2; } int g_num = 1001; int main() { printf("%dn", MM::age); printf("%dn", Boy::age); int g_num = 1; printf("全局变量:%dn", ::g_num); MM::print(); using namespace MM; //省略前缀的调用方式 print(); using namespace Boy; //printf("%dn", age); //二义性问题:有两个选择,不知道找谁 printf("%dn", Boy::age); printf("%dn", MM::age); return 0; }
namespace A
{
int a=1;
namespace B
{
int b = 1;
}
}
void test()
{
//剥洋葱
A::a = 1;
A::B::b = 2;
using namespace A::B;
b = 3;
}
先声明后实现
//其他写法: 先声明后实现的一种写法
namespace Data
{
void print();
struct student;
}
//必须空间名限定
void Data::print()
{
}
struct Data::student
{
int age;
int num;
};
标准的命名空间std
- C++所有的函数和类都是属于标准命名空间
。不写using namespace std; 意味着所有C++标准库中的东西都需要加上std::
using namespace std; //习惯性的操作C++函数新思想 函数重载 什么是函数重载
C++允许同名不同参数的函数存在,C语言不允许同名函数存在
不同参数的三个体现- 数目不同
- 类型不同
- 顺序不同:前提条件是存在不同类型
#includeusing namespace std; //类型不同 int Max(int a, int b) { return a > b ? a : b; } float Max(float a, float b) { return a > b ? a : b; } //顺序不同 // error C2084: 函数“int Max(int,int)”已有主体 //int Max(int b, int a) //{ // //} void print(int a, char c) { } void print(char a, int c) { } //数目不同 void print(int a, int b, int c) { } //想当然了 //double就是末尾加个d 错误的 //char就是加个c嘛 错误的 int main() { printf("%dn", Max(1, 2)); printf("%.1fn", Max(1.1f, 2.2f)); //错误,C++对于类型要求比C语言严格 1L; //long 1.1f; //float 1u; //unsiged; //默认的小数是double; return 0; }
函数重载和函数返回值一点毛线关系都没有。
函数缺省 什么是函数缺省函数缺省就是给形参赋初始值,当不传参的时候使用的是默认值
函数缺省规则- 只能从右往左缺省,中间不能有空着的
- 多文件中,.h文件缺省了,cpp不需要缺省(声明做了缺省,实现就不需要缺省)
实现函数的不同形态的调用,针对不同需求做不同实现
#includeC++标准输入和输出 标准输出using namespace std; //函数缺省 void printData(int a=1, float b = 1.11f, double c=1.11 , char d = 'A') { printf("%dt%ft%lft%cn", a, b, c, d); } int main() { printData(); //所有形参都是默认值 printData(9); //a=9,其他值用默认值 printData(9, 2.22f); //a=9 b=2.22 其他默认值 printData(9, 2.22f, 9.9); //a=9,b=2.22 c=9.9 其他默认值 printData(9, 2.22f, 9.9,'D'); //所有的值用的是传入的值 return 0; }
- cout + << 一起完成的
- 换行: endl替换"n"
#include标准输入using namespace std; //缺省std前缀的 struct MM { char name[20]; int age; int num; }; int main() { //单个数据输出 std::cout << "ILoveyou"; //没有写using namespace std; 必须加前缀 cout << 1; //多个数据的输出 cout << "n"; cout << "姓名t" << "年龄t" << "编号n"; struct MM mm = { "mm",18,1001 }; cout << mm.name << "t" << mm.age << "t" << mm.num << "n"; //和上面一行代码效果一样 cout << mm.name << "t"; cout << mm.age << "t"; cout << mm.num << "n"; cout << endl; //等效:cout<<"n"; std::cout << std::endl; //一样的是std命名空间中的 return 0; }
- cin+ >> 一起完成
- 输入不需要任何的格式控制字符
#include小试牛刀using namespace std; //缺省std前缀的 struct MM { char name[20]; int age; int num; }; int main() { cout << "请输入一个整数:"; int num; cin >> num; //变量名 cout << num << endl; cout << "请输入一个字符串:"; char str[20]; while (getchar() != 'n'); //存在跳过显现:清空缓冲区 //setbuf(stdin, NULL); //影响汉字输入,汉字的文件操作出现问题 //fflush(stdin); //C++中已经淘汰了,有时候使用没有效果 cin >> str; //数组名 cout << str << endl; cout << "input num and str:"; cin >> num >> str; cout << num << "t" << str << endl; cout << "input name,age,num:"; struct MM temp; cin >> temp.name >> temp.age >> temp.num; cout << "姓名t年龄t编号" << endl; cout << temp.name << "t" << temp.age << "t" << temp.num << endl; return 0; }
//用C++ 子函数的方式实现模拟登录 #include总结#include #include using namespace std; void Input(char* userName, char* passWord) { //..... //登录实现密码不可见 cout << "用户名:"; cin >> userName; while (getchar() != 'n'); int i = 0; char key = 0; cout << "密 码:"; while ((key = _getch()) != 'r') { cout << "*"; passWord[i++] = key; } passWord[i] = ' '; cout << endl; } int Login(char* username, char* passWord, const char* root = "root", const char* pass = "12345") { //比较验证 if (strcmp(username, root) == 0 && strcmp(passWord, pass)==0) { return 1; } return 0; } int main() { char userName[20] = {""}; char passWord[7] = {""}; Input(userName, passWord); if (Login(userName, passWord) == 1) { //登录成功 cout << "登录成功" << endl; } else { //打印用户名和密码错误 cout << "打印用户名和密码错误" << endl; } return 0; }
当你能梦的时候就不要放弃梦!
C++总体来说还是比较抽象的,需要多多的去练习,祝好运!



