学完C语言和初阶数据结构,感觉自己又行了? 接下来进入C++的学习,准备好接受头脑风暴吧。

C++ 的第一个程序,梦回出学C语言,第一次使用C语言写代码;这里使用C++写第一个C++代码。
#include<stdio.h>
int main()
{
printf("Hello,World ! ! !\n");
return 0;
}看到这里,很疑惑?不是第一个C++程序代码吗?怎么使用C语言来写呢?
这里C++兼容C语⾔绝⼤多数的语法,所以C语⾔代码也可以运行,C++文件后缀为.cpp,vs编译器对后缀为 .cpp的文件就会调⽤C++编译器编译;linux下要⽤g++编译,不再是gcc。
当然呢,C++ 也有自己的输入输出,来看使用C++代码实现第一个C++程序:
#include<iostream>
int main()
{
cout << "Hello World!!!" << endl;
return 0;
}
在接下来的学习中,一一来学习C++这些知识。
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都存在于全局作用域中,可能会导致很多冲突。 使用命名空间的目的就是对标识符的名称进行本地化,来避免命名冲突或,namespace关键字的出现就是针对命名冲突这种问题的。
在C语言中,类似与下面程序这样的命名冲突,是一个普遍存在的问题,C++引入namespace就是为了更好的解决这样的问题。
#include<stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{
// 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”
printf("%d\n", rand);
return 0;
}
定义命名空间:
#include<stdlib.h>
namespace HL
{
int rand = 0;
int Add(int x, int y)
{
return x + y;
}
}
int main()
{
printf("%p\n", rand);
printf("%d\n", HL::rand);
printf("%d\n", HL::Add(1, 2));
return 0;
}嵌套定义:
namespace HL
{
namespace H
{
int rand = 0;
int Add(int x, int y)
{
return x + y;
}
};
namespace L
{
int rand = 1;
int Add(int x, int y)
{
return (x + y) * 10;
}
}
}
int main()
{
printf("%d\n", HL::H::rand);
printf("%d\n", HL::L::rand);
printf("%d\n", HL::H::Add(1,2));
printf("%d\n", HL::L::Add(1,2));
return 0;
}多文件定义命名空间:
多个文件定义同名的namespace,它们会默认合并到一起,就像同一个namespace一样。
编译查找一个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找。所以下面程序会编译报错。我们要使用命名空间中定义的变量或者函数是,有以下三方式:
不会主动到命名空间去查找变量/函数

指定命名空间访问
namespace HL
{
int a = 1;
int b = 0;
}
int main()
{
printf("%d\n", HL::a);
printf("%d\n", HL::b);
return 0;
}展开某个成员
namespace HL
{
int a = 1;
int b = 0;
}
using HL::a;
int main()
{
printf("%d\n", HL::a);
//printf("%d\n", HL::b); 这里会提示未定义的标识符‘b’
return 0;
}展开全部成员
namespace HL
{
int a = 1;
int b = 0;
}
using namespace HL;
int main()
{
printf("%d\n", HL::a);
printf("%d\n", HL::b);
return 0;
}using namespace std;
int main()
{
int a = 0;
double d = 1.1;
cout << a << endl;
cout << d << endl;
//输入
cin >> a;
cin >> d;
cout << a << " " << d << endl;
//C输入
scanf("%d%lf", &a, &d);
printf("%d %lf\n", a, d);
return 0;
}C++是兼容C语言的,也可以加上以下代码让C++不在兼容C语言,提高C++ IO效率
#include<iostream>
using namespace std;
int main()
{
// 在io需求⽐较⾼的地⽅,如部分⼤量输⼊的竞赛题中,加上以下3⾏代码
// 可以提⾼C++IO效率
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
return 0;
}缺省参数:
using namespace std;
void test1(int a = 0)
{
cout << a << endl;
}
int main()
{
test1();
test1(9);
return 0;
}//全省参数
void test2(int a = 0, int b = 1, int c = 2)
{
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "c= " << c << endl;
cout << endl;
}
int main()
{
test2();
test2(11);
test2(11, 22);
test2(11, 22, 33);
return 0;
}
//半缺省参数
void test3(int a, int b = 1, int c = 2)
{
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "c= " << c << endl;
cout << endl;
}
int main()
{
test3(11);
test3(11, 22);
test3(11, 22, 33);
return 0;
}
C++支持在同一作用域中出现同名函数,但是要求这些函数的形参不同,可以是参数个数不同或者参数类型不同;这样C++函数调用就表现了多态行为,使用更加灵活。(C语言是不支持同一作用域中出现同名函数的)
//参数类型不同
int Add(int x, int y)
{
cout << "Add(int x,int y)" << endl;
return x + y;
}
double Add(double x, double y)
{
cout << "Add(double x,double y)" << endl;
return x + y;
}
int main()
{
cout << Add(1, 2) << endl;
cout << Add(1.1, 2.2) << endl;
return 0;
}
void fun()
{
cout << "If you never leave." << endl;
}
void fun(int a)
{
cout << "I will live and die together." << endl;
}
int main()
{
fun();
fun(1);
return 0;
}
这里有一个需要注意的点,如果只有参数,而且给了缺省参数,(如果这是还有一个与其命名相同的函数(没有参数),调用时就会报错)

//参数的类型顺序不同
void Test(int a, char c)
{
cout << "If you never leave." << endl;
}
void Test(char c, int a)
{
cout << "I will live and die together." << endl;
}
int main()
{
Test('x', 1);
Test(1, 'x');
return 0;
}//参数的类型顺序不同
void Test(int a, char c)
{
cout << "If you never leave." << endl;
}
void Test(char c, int a)
{
cout << "I will live and die together." << endl;
}
int main()
{
Test(1, 'x');
Test('x', 1);
return 0;
}

感谢各位支持