C++ 学习 lesson01

/**
1:主要讲解的内容
2:域运算符
3:new、delete运算符
4:重载
5:name managling 与 extern "C"
6:带默认参数的函数

全局变量的访问
C++中增加的作用域标示符
    1:用于对于局部变量同名的全局变量进行访问
    2:用于表示类的成员,这将在关于累的一节中详细说明

#include <iostream>

using namespace std;

int var = 100;

int main()
{

	int val = 50;
	
	cout<< val<<endl;
	
	cout<<::var<<endl;
	
	return 1;

}

输出结果
50
100
new 和 delect 的用法
new opeator   分配内存+调用构造函数
opeator new   只分配内存
placement new 不分配内存、调用拷贝构造函数

#include <iostream>

using namespace std;

int main()
{

	int* p  = new int(31);

	int* p1  = new int[10];

	cout<<*p<<endl;

	delete p;

	delete[] p1;

	return 0;

}

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

函数重载又称为函数的多态性

函数重载不同形式
    形参数量不同
    形参类型不同
    形参的顺序不同
    形参数量和形参类型都不同
    
调用重载函数时,编译器通过检查实际参数的个数、类型和顺序
来确定相应的被调用函数

静态联编------------------------------------------
编译时候确定函数的入口地址
动态联编
运行时候确定函数的入口地址
通过virtual

合法的重载例子
    
    int abs(int i);
    long abs(long i);
    double abs (double d);
    
非法的重载例子
    int abs(int i);
    long abs(int i);
    void abs(int i);

#include <iostream>


using namespace std;

void fun(int a , int b)
{
	cout<<"int fun"<<endl;
}

void fun(double a , double b)
{
	cout<<"float fun"<<endl;
}

int main()
{
	fun(2,3);

	

	fun(3.3 , 4.5 );

	return 0;

}

name managling 这里把它翻译为名字改编
C++ 为了支持重载 需要进行name  managling
extern "C"实现C与C++ 混合编程

#include <iostream>


using namespace std;


#ifdef __cpluscplus
extern "C"
{
#endif
	int add(int a,int b);
	int num(int a=10);

#ifdef __cpluscplus
}
#endif

int add(int a ,int b)
{

	return a+b;
}

int num(int a )
{

	return a;

}


int main()
{

	int he;

	he = add(30,60);

	cout<<he<<endl;

	int newnum;

	newnum = num();


	cout<<newnum<<endl;



	return 0;
}

函数没有声明时,在函数定义中指定形参的默认值
函数既有定义又有声明时,声明时指定后,定义后就不能再指定默认值
默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值
void func1(int a ,double b=4.5 ,int c =3); //合法
void func1(int a=1 ,double b, int c = 3); //不合法
函数调用时,实参与形参按从左到右的顺序进行匹配
重载的函数中如果形参带有默认值时。可能产生二义性
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 ;

}

sum=add(10,20)语句产生二义性 可以认为该语句是调用第一个函数,也可以
是第二个,因此编译器不能确定调用的是哪一个函数

posted @ 2014-09-17 16:24  被淹死的鱼鱼  阅读(91)  评论(0编辑  收藏  举报