c++是一种面向对象的语言。业界从工程项目(Linux)应用面向对象的设计方法,在C语言中加入了面向对象的方法。C++就诞生了。
C++与C语言不是竞争关系,C++是C语言的一个加强。C++完全兼容所有的C语言的语法。
二、命名空间 2.1前言在C/C++中,变量,函数,类都是大量存在的,这些变量,函数,类都存在于全局作用域中,这个时候就会造成很多的冲突,为了避免这种冲突,C++提供了命名空间的方式爱解决问题。
2.2命名空间的使用定义命名空间,需要使用 namespace关键字, 后面要跟上命名空间的名字, 然后接上一对儿 {}, {}里面就是命名空间的成员
2.3命名空间的格式格式:
namespace 命名空间的名称
{
命名空间里面的内容.
}
注意:
程序在用到 变量/ 函数的时候,先会去局部作用域中寻找,如果局部作用域中没有,在去全局作用域中寻找,不会去命名
空间作用域中寻找.
2.4命名空间的嵌套
格式:
namespace N1
{
命名空间成员;
namespace N2
{
命名空间成员
}
}
demo:
namespace N1
{
int a = 10;
int b = 20;
int Add(int left, int right)
{
return left + right;
}
namespace N2
{
int c = 100;
int d = 200;
int sub (int left, int right)
{
return left - right;
}
}
}
2.5定义相同名称的命名空间
同一个工程中允许存在多个名称的命名空间,编译器最后会合成到同一个命名空间中。
#include三、命名空间的使用 3.1 通过作用域限定符(::)来访进行问namespace N1 { int number1 = 100; } namespace N1 { int number2 = 200; } int main() { printf("number1 : %dn", N1::number1); printf("number2 : %dn", N1::number2); return 0; }
"::":功能,指定去哪个作用域里面寻找对应的变量或者函数。
#include3.2 使用using namespace 命名空间名称// 定义命名空间 N1 namespace N1 { // 定义命名空间里面的内容 int printf = 20; } int main() { int number = 20; printf("number = %dn", number); printf("N1::printf = %dn", N1::printf); return 0; }
功能:将命名空间里面的成员全部引入到全局作用域中
注:使用using namespace 命名空间名称 会破坏命名空间的封装作用
#include3.3使用using 将命名空间中的单独的成员引用namespace N1 { int a = 10; int b = 20; int Add(int left, int right) { return left + right; } namespace N2 { int c = 100; int d = 200; int sub (int left, int right) { return left - right; } } } using namespace N1; int main() { // 如何使用 sub函数并且传递的参数为 N1 里面 a, b // 需要访问 sub 函数 int ret = N2::sub(a, b); printf("ret = %dn", ret); return 0; }
功能: 将命名空间中的单独成员加载到全局作用域中.
格式: using 命名空间名称::成员
#include四、输入输出 4.1输出 cout<< "a = "<< a <namespace N1 { int money1 = 100; int money2 = 200; int money3 = 300; int money4 = 400; int money5 = 500; int money6 = 600; } // 将单独的成员变量 money1加载到全局作用域 using N1::money1; int main() { printf("money1 = %dn", money1); printf("money2 = %dn", money2); // error 没有将money2加载到全局作用域中 return 0; }
使用cout 输出。 cout:是一个对象 ostream这个类的对象。
<< : 运算符 将hello world 的内容通过 << 流入 cout这个对象。 // endl : 全称 end line == n
// c++语法中输入输出使用 iostream 这个头文件,以及std标准命名空间来输入输出 #include4.2输入cin>>number;// 展开 std 命名空间 using namespace std; // 命名空间。输出对象 cout 是定义在 std这个命名空间里面的 int main() { // 输出hello world cout << "hello world << std::endl; // 使用cout 输出。 cout:是一个对象 ostream这个类的对象。 // << : 运算符 将hello world 的内容通过 << 流入 cout这个对象。 // endl : 全称 end line == n return 0; } 注: cout 输出的内置类型. 无需在意类型, 都可以自己输出.
c++ 中的输入更加的方便, 无需在意数据格式控制. 比如 c语言中, 整形 %d 字符 %c ,在c++中,无需 控制格式.
#include五、缺省参数 5.1概念// 展开命名空间 using namespace std; int main() { // c++ 语言 输入使用的 cin. 他是 iostream类里面的一个全局对象。定义在std 这个命名空间中 int number; // 从键盘中输入数据到 number 中 cin >> number; // cout << cin; // 将 cin这个对象 输出到 显示器中。 error //cout << "number :" << number << endl; // 每次流入到cout 里面必须是同一个中数据类型 return 0; }
缺省参数在声明或者定义函数的时候为函数的一个参数指定一个默认值, 在调用这个函数的时候,如果没有指定实际参数,则采用该函数的默认值. 否则使用指定的参数.
#include5.2 缺省参数的分文件编写// 展开命名空间 using namespace std; // 定义缺省参数 num 为0 void TestFunction(int num = 0) { cout << "num :" << num << endl; } int main() { TestFunction() ; // 没有传递参数, 使用默认值 TestFunction(100) ; // 传参的时候,使用指定的实际参数 return 0; }
在函数分文件编译中, 缺省参数的值, 只能够在声明函数的时候给出. 不可以在实现的时候给出.
head.h #include5.3缺省参数的分类 5.3.1全缺省参数using namespace std; // 声明缺省函数 void TestFunction(int num = 100); // 函数声明时候给出缺省值 test.cpp #include "head.h" void TestFunction(int num) // 函数定义的时候不能给出缺省值. { cout << num << endl; }
所有的参数: 全部给出缺省值.
# 定义一个打印年月日的全缺省函数
void show(int year = 0, int month =1 , int day =1)
{
cout << year << month << day << endl;
}
5.3.2半缺省参数
半缺省参数: 最少有一个参数拥有缺省值 .
# 定义一个打印年月日的半缺省函数
void show(int year , int month =1 , int day)
{
cout << year << month << day << endl;
}
六、函数重载
6.1 前言
自然语言中. 一词多意. demo: 中国有两项体育运动没有悬念, 一个是乒乓球,一个是男足, 前面的谁也赢不了, 后面也是谁也赢不了.
6.2 定义函数重载: 函数的一种特殊情况, C++允许在同一个作用域中申明几个功能类似的同名函数. 这些同名函数中形式参数列表(参数的个数, 类型, 顺序) 必须不同.
解释: 在 c++ 中允许定义函数名相同的函数,但是定义的函数参数必须不同(个数或者类型) 他们就构成函数的重载.
在调用函数的时候, 会根据传递过来的实际参数,选择对应的函数进行调用.
#includeusing namespace std; // 定义计算两个整形的函数: int Add(int left , int right) { cout << "int " < 6.3函数重载原理 七、引用 7.1 引用概念 引用类比的是 c语言的指针.
引用不是定义一个新的变量, 它是个已经存在的变量起一个 "别名"
7.2 引用定义格式类型 & 别名 = 引用的实体
#include7.3引用特性// 展开空间命名空间 using namespace std; int main() { // 定义一个变量 a int a = 10; // 给变量 a 取一个别名 int &ra = a; // ra 是 a 的一个别名。 ra 改变, a 也要改变。 a = 100; printf("&ra = %dn", ra); return 0; } 引用在定义的时候必须要求初始化.
引用一旦引用一个实体,在也不引用其他实体了.
一个变量可以有多个引用
#include7.4常引用constusing namespace std; int main() { int a = 10; // 引用必须要初始化,如果不初始化, 编译会出错的 // int &ra; // 定义引用没有初始化 // 一个变量可以有多个引用 int &ra = a; int &rra = a; int &rrrra = a; // 引用一旦引用了一个实体,就不能在引用其他实体了。 int b = 100; int &rb =b ; // 给rb 引用一个实体 b , rb 就再也不能引用其他实体了 rb = a; // 将 a 的值赋值给了, b . return 0; } const : 将变量设置为只读属性.
权限只能够缩小, 不能够扩大.
#includeusing namespace std; int main() { int a = 10; // 定义了变量 a . a的权限是可读可写 const int &ra = a; // 定义了常引用 ra ,只能够读。 return 0; }



