前言:什么是C++
C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
第一章:C++入门
1. 命名空间
为了更好的避免在工作之中分模块工作发生函数和变量的命名冲突,我们引入了命名空间的概念,一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间之中,不会和其他变量或函数造成同名冲突。
- 命名空间的定义:定义命名空间,需要使用到
namespace
关键字,在后面跟上命名空间的名字,然后接一对{ }
,在大括号之中的内容即为命名空间的成员。
//1. 普通的命名空间
namespace N1 // N1为命名空间的名称
{
// 命名空间中的内容,既可以定义变量,也可以定义函数
int a;
int Add(int left, int right)
{
return left + right;
}
}
//2. 命名空间可以嵌套
namespace N2
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N3
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// 相同的命名空间之中不能够重复定义变量和函数
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}
- 命名空间的使用方式
命名空间+ :: + 成员
(也是比较推荐的一种方式)N1 ::Mul(left,right)
引入成员 using + 命名空间 + ::+ 成员
后面使用成员时,不需要加作用域,这样也将会直接导致成员暴露在全局域之中,(如果全局域中有同名的成员,将会导致成员冲突)using N2::a
展开命名空间 using + 命名空间
命名空间中所有成员暴露在全局域中,和第二种方式一样,需要注意的同上!using namespace N1
2. C++输入&输出
- 在编写C++程序需要进行输入输出时:需要包含的头文件
#include <iostream>
using namespace std;
- 输入输出的标准格式
输入:cin>>b>>a
输出:cout<<a<<b<<endl
(endl
换行符)
- 不需要显示指定输入输出变量的格式,比如整形,字符的%d %c。
- 支持连续的输入输出
- 字符串和非字符串输出
int a = 10 ;
char* p = "1234";
int* pa = &a;
std::cout << pa << std::endl; //非字符串指针输出地址
std::cout << p << std::endl; //字符串指针输出内容
3. 缺省参数
- 缺省参数是声明或定义函数时为函数的参数指定的一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
void TestFunc(int a = 0)
{
cout<<a<<endl;
}
int main()
{
TestFunc(); // 没有传参时,使用参数的默认值
TestFunc(10); // 传参时,使用指定的实参
}
- 缺省参数分类
全缺省参数
void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
半缺省参数
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
- 半缺省参数必须从右往左依次来给出,不能间隔的给
- 缺省参数不能在函数声明和定义之中同时出现。
- 缺省值必须时常量或者是全局变量
- C语言不支持
//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{
}
// 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。