- 源文件不同,创建c++源文件用的后缀是.cpp
- iostream : C++标准输入输出流的头文件
- 包含头文件的方式不同
- 不需要.h 直接包含
- C++可包含C语言的标准库头文件
- 依然按照原来方式包含,一定程序C++兼容C语言
- C++包含方式: 原来的头文件去掉后缀.h,在前面加c,例如:
#include
#include #include - 自己写的头文件和C语言的包含方式一样,例如:
#include "myhead.h"
- 命名空间就是用来组织和重用代码的编译单元
- 可以提高标识符使用,可以避免命名污染,它能有效地指出某个标示符到底属于哪个库。
namespace 空间名
{
//变量
//函数
//结构体
//类
}
//可用namespace 声明一个东西
怎么访问命名空间
- 通过作用域分辨符访问
- :: :作用域分辨符
- 访问空间中的成员: 空间名::成员名
#include
#include namespace Boy { int age = 2; } int main() { printf("%dn", Boy::age); return 0; } - 用来区分全局变量和局部变量
- ::全局变量
#include
#include int g_num = 1001; int main() { int g_num = 1; printf("全局变量:%dn", ::g_num); printf("局部变量:%dn", g_num); return 0; } - using语法 ,可以省略前缀的写法
using namespace 空间名; //就可以省略当前的空间名 //只在当前作用域下有效 //注意点:有作用域 #include命名空间嵌套#include namespace MM { int age = 1; void print() { printf("MMn"); } } namespace Boy { int age = 2; } int main() { using namespace MM; //省略前缀的调用方式 print(); using namespace Boy; //再次使用using语法,如果出现相同的变量,函数等,可能会出现二义性问题 //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内的东西使用了省略前缀,而A中的没用,所以这里的变量a不能省略前缀
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++允许同名不同参数的函数存在,C语言不允许同名函数存在
- 类型不同
- 数目不同
- 顺序不同:前提条件是存在不同类型
#include#include //类型不同 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) { } //测试 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不需要缺省(声明做了缺省,实现就不需要缺省)
实现函数的不同形态的调用,针对不同需求做不同实现
#includeusing 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; }



