笔记2(从c到c++)

C++中增加的作用域标识符::

1、用于对与局部变量同名的全局变量进行访问

2、用于表示类的成员

#include<iostream>
using namespace std;
int val=100;
int main()
{
	int val=40;
	cout<<val<<endl;
	cout<<::val<<endl;//加上作用域标识符  访问全局变量
	return 0;
}

New和Delete运算符

New运算符可以用来创建堆空间(相当于malloc)  成功返回首地址  失败直接抛出异常

语法  指针变量=New 数据类型           指针变量=New 数据类型[长度n]

堆上开辟的空间要手动释放  用Delete

#include<iostream>
using namespace std;
int val=100;
int main()
{
	int *p=new int;//分配四个字节  分配一个整数空间   operator new  像malloc一样仅仅只分配内存
	//int *p=new int(33);//分配四个字节  分配一个整数空间存放整数33  new operator
	cout<<*p<<endl;//内容随机

	int *p2=new int[10];//分配连续的10个整数空间   40字节  用循环语句初始化
	delete p;
	delete[] p2;
	//new 的时候有[] delete的时候必须加上[]否则释放的空间不确定  []表示分配n个连续的数据类型的空间
	//()表示只分配一个空间对这个空间初始化
	return 0;
}

New一个新对象()1、分配内存(调用operator new) 2、调用构造函数    malloc只做内存的分配

Delete释放一个对象  1、调用析构函数  2、释放内存(调用operator delete )

 new operator 分配内存+调用构造函数

 operator new 分配内存

placement new    不分配内存、调用拷贝构造函数

重载:

 1、相同的作用域,  如果两个函数名称相同,而参数不同,我们把它们称为重载overload

2、函数重载又称为函数的多态性(静态多态  编译时确定函数入口地址)

3、函数重载的不同形式:

    形参数量不同

    形参类型不同

    形参的顺序不同

    形参类型和形参数量都不同

4、调用重载函数时,编译器通过检查实际参数的个数、类型和顺序来确定被调用函数

编译时确定函数的入口地址称为静态联编 (函数重载实现)  

运行时确定函数的入口地址称为动态联编(虚函数实现)

#include<iostream>
using namespace std;
void fun(int a,int b)
{
	cout<<"int fun"<<endl;
}
void fun(double a,double b)
{
	cout<<"double fun"<<endl;
}
int main()
{
	fun(1,2);
	fun(1.3,2.5);
	return 0;
}

如果返回类型不同,而函数名相同、形参也相同,则是不合法的编译器会报“语法错误”

name managling 名字改编

C++为了支持重载,需要进行 name managling

extern"C"实现C与C++的混合编程

extern"C"表示不进行名字改编 按照C语言的形式执行   C语言不进行名字改编 所以C语言也就不支持重载

#ifdef _cpluscplus//使用了C++的规则
extern"C"
{
#endif
	...
#ifdef _cpluscplus
}
#endif

 带默认形参值的函数

函数声明或者定义的时候,可以给形参赋一些默认值

调用函数时,若没有给出实参,则按指定的默认值进行工作。

函数没有声明时,在函数定义中指定形参的默认值

函数既有定义又有声明是,声明时指定后,定以后就不能再指定默认值

默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值

void fun(int a,double b=4.2,int c=3)//合法

void fun(int a=1,double b ,int c=4)//不合法

函数调用时,实参与形参按照从左到右的顺序进行匹配

带默认形参值得函数的二义性

重载的函数中如果形参带有默认值时,可能产生二义性

int add(int x=5,int y=6);
int add(int x=5,int y=6,int z=7);
int main()
{
	int sum;
	sum=add(10,20);//此时两个函数都可以匹配  产生二义性 编译器无法确定调用的是那个函数
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值