net做网站遇到的问题,电子商务网站建设需要学什么软件,建站模板网站设计,山楂树建站公司一.什么是C C语言是结构化和模块化的语言#xff0c;适合处理较小规模的程序。对于复杂的问题#xff0c;规模较大的程序#xff0c;需要高度 的抽象和建模时#xff0c;C语言则不合适。为了解决软件危机#xff0c; 20世纪80年代#xff0c; 计算机界提出了OOP(object o…一.什么是C C语言是结构化和模块化的语言适合处理较小规模的程序。对于复杂的问题规模较大的程序需要高度 的抽象和建模时C语言则不合适。为了解决软件危机 20世纪80年代 计算机界提出了OOP(object oriented programming面向对象)思想支持面向对象的程序设计语言应运而生。 1982年Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念发明了一种新的程序语 言。为了表达该语言与C语言的渊源关系命名为C。因此C是基于C语言而产生的它既可以进行C语 言的过程化程序设计又可以进行以抽象数据类型为特点的基于对象的程序设计还可以进行面向对象的程序设计。 C的发展史
1979年贝尔实验室的本贾尼等人试图分析unix内核的时候试图将内核模块化于是在C语言的基础上进行扩展增加了类的机制完成了一个可以运行的预处理程序称之为C with classes。
C的历史版本 C的关键字
在(C98)版本中相较于C语言C增加了31个关键字一共63个。 二、命名空间
在C/C中变量、函数和类都是大量存在的这些变量、函数和类的名称都将作用于全局作用域中可能会导致很多命名冲突。使用命名空间的目的就是对标识符和名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。
命名空间定义
定义命名空间需要使用到 namespace 关键字后面跟命名空间的名字然后接一对{}中即为命名空间的成员。
普通定义
namespace swean
{int rand 10;int Add(int left, int right){return left right;}}
嵌套定义
namespace swean
{int rand 10;namespace swean1{int rand 1;}
}
空间合并
同一个工程中允许存在多个相同名称的命名空间编译器最后会将其成员合成在同一个命名空间中所以我们不能在同一个命名空间中定义两个相同名称的成员。
命名空间使用 那么命名空间应该如何使用呢我们有以下三种方法
加命名空间名称及作用域限定符
符号“::”在C中叫做域作用限定符我们通过“命名空间名称::命名空间成员”便可以访问到命名空间中相应的成员。:: 的左边为域如果有命名空间域则限定访问命名空间域中的内容如果域左边为空访问的就是全局域会直接到全局范围内找 :: 右边的变量或其他。
int rand 0;namespace swean
{int rand 10;namespace swean1{int rand 1;}
}int main()
{//printf(%d\n, rand);//域作用限定符printf(%p\n, rand);printf(%d\n, swean::rand);printf(%d\n, swean::swean1::rand);return 0;
}
使用using将命名空间中的成员引入 用“using 命名空间名称::命名空间成员”的方式将命名空间中指定的成员引入。这样一来在该语句之后的代码中就可以直接使用引入的成员变量了。
#include stdio.h
namespace swean
{int rand;
}
using swean::rand;
int main()
{rand 10;printf(%d\n, rand);return 0;
}使用using namespace 命名空间名称引入
通过”using namespace 命名空间名称“将命名空间中的全部成员引入。这样一来在该语句之后的代码中就可以直接使用该命名空间内的全部成员了。
#include stdio.h
namespace swean
{int rand;
}
using namespace swean;
int main()
{rand 10;printf(%d\n, rand);return 0;
}三、C输入输出
#includeiostream
//std是C标准库的命名空间
//using namespace std;
using std::cout;
using std::endl;int main()
{// 流插入运算符cout hello world \n;std::cout hello world std::endl;int i 0;// 流提取std::cin i;return 0;
} 1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件 以及按命名空间使用方法使用std。 2. cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。 3. 是流提取运算符。 4. 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型。 #include iostream
using namespace std;
int main()
{int i;double d;char arr[20];cin i;//读取一个整型cin d;//读取一个浮点型cin arr;//读取一个字符串cout i endl;//打印整型icout d endl;//打印浮点型dcout arr endl;//打印字符串arrreturn 0;
}四、缺省参数
缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实 参则采用该形参的缺省值否则使用指定的实参。
void func(int a 1)
{cout a endl;
}
缺省参数分类
全缺省参数
全缺省参数即函数的全部形参都设置为缺省参数。
//全缺省
void func1(int a 10, int b 10, int c 30)
{cout a a endl;cout b b endl;cout c c endl endl;
}
半缺省参数
半缺省参数必须从右往左依次给出不能间隔着给。传参时必须连续缺省值使用必须从右往左连续使用
//半缺省
void func2(int a, int b 10, int c 30)
{cout a a endl;cout b b endl;cout c c endl endl;
}
注意
缺省参数不能在函数声明和定义中同时出现
一般是声明时给缺省值定义不给。.
//错误案例void func1(int a 10, int b 10, int c 30);
void func1(int a 10, int b 10, int c 30)
{cout a a endl;cout b b endl;cout c c endl endl;
}
缺省值必须是常量或者全局变量。
五、函数重载
函数重载概念
函数重载是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型 不同的问题。
#include iostream
using namespace std;
int Add(int x, int y)
{return x y;
}double Add(double x, double y)
{return x y;
}int main()
{cout Add(1, 2) endl;cout Add(1.1, 2.2) endl;return 0;
}函数重载的原理--名字修饰
为什么C支持函数重载而C语言不支持函数重载呢 在C/C中一个程序要运行起来需要经历以下几个阶段预处理、编译、汇编、链接。
在C语言中汇编阶段进行符号汇总时一个函数汇总后的符号就是其函数名所以当汇总时发现多个相同的函数符号时编译器便会报错。 而 C 在进行符号汇总时对函数的名字修饰做了改动函数汇总出的符号不只是函数的函数名而是通过其参数的类型和个数以及顺序等信息汇总出 一个符号这样一来就算是函数名相同的函数只要其参数的类型或参数的个数或参数的顺序不同那么汇总出来的符号也就不同了。
vs gcc