c++类自探索1

b站链接

一、命名空间

1引入

一项工程,你和小张要一起完成,你们在各自编写模块代码的时候都同时编写了一个相通名字的接口,等代码合并时,导致了命名冲突。

c语言不能有效解决这个问题。下方代码会出错。

int scanf=10;
int main ()
{
  printf("%d",scarf);
}

所以c++引入命名空间。

命名空间作用:将标识符本地化。

2定义

namespace N1
{
int a;
void swap(int *a,int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;

}

举例:Myname命名空间将int型的scanf关进小黑屋。不能在main里调用

namespace Myname
{
int scanf=100;
}

int main ()
{
printf("%p",scanf);
}

那如何调用命名空间里的变量呢?

1加作用域限制符::,此时输出为100

namespace Myname
{
int scanf=100;
}

int main ()
{
printf("%d",Myname::scanf);
}

2使用。using Myname::a。或者 using namespace Myname 全部导入

把a释放出来 

namespace Myname
{
int a=100;
}
using Myname::a;
int main ()
{
printf("%d",a);
}

using namespace std;可以解释为输入输出(cout等)全都包含在std命名空间里,需要导入

二、输入输出

1.cout(控制台)

cout<<"hello\n";  //意思是把hello流向控制台

cout<<"hello"<<endl;  //endl表示换行符 endline

std::cout<<"hello\n";

2cin(键盘)

int a=0;

std::cin>>a;

std::cout<<a<<std::endl;

连续输入

std::cin>>a>>c;   //先输入a,再输入c

三缺省参数

1情景导入

要一个初始化数组大小的函数,由于不知道申请多少空间,初始化先随机申请,后序用的时候再扩充。

c语言无法实现。

2概念

指的是定义函数的时候,指定一个参数使其具有默认值,如果进行调用的时候传入实参,则用,否则用默认值。

3示例:

void test(int a=1)//默认值

{

  std::cout<<a<<std::endl;
}

int main ()

{

tesst();//不传参情况

test(10);

};

 4

全缺省参数

半缺省参数

5注意事项

缺省参数不能放在声明中

//a.h

void test(int a);

//a.c

void test(int a=10){}

四、函数重载

1.情景引入

学c语言的时候必然会做一个联系是计算器,加减乘除用四个不同函数名的函数。但在c++中不一样。

2概念

c++中允许声明几个功能类似的同名函数,但这些同名函数的形参必须不同。(个数/类型/顺序)

int add(int a) return a;

double add(double a)return a;

本质原因:g++编译的时候函数修饰带参数

3

为了照顾c的项目:反修饰

extern "C" int add(int a);

五、引用

引用就是起别名,这一片内存空间叫a,然后给它起个额外的别名叫b。a和b操作同片内存空间。

int a=10;

int&b =a;

1常引用

c语言我们知道,如果定义一个常整型,表示这个整型变量不能被修改,如果用普通引用就会出问题。

int main(){

const int a=10;

int& b=a;}//错误,权限被放大,引用前只可读,引用后可读可写

 为了 保证引用后权限不变,就必须用常引用。

int main(){

const int a=10;

const int& b=a;//常引用

}

 指针和引用时权限不能放大,但可以缩小。

int main(){

int a=10;

const int& b=a;//常引用

}

引用常数时,必须用常引用。

 int& a=10;//错误

 int& a=10;//错误

c语言中,浮点转为整型时,有个中间过程,会涉及到一个具有常性的中间变量,得用常引用

double a=3.14;

int b=a;

int& ps=a;//错误

const int& ps=a;//正确 

常引用好处在形参(1可以传入权限大的int,2也可以传入double)

void test(const DataType& x)

{} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值