C++ (1)C++对C语言的提高
1)命令空间的三种方式
- 直接指定标识符:
std::cout<<"good"<<std::endl
- 使用
using
关键字:using std::cout
- 导入整个命令空间:
using namespace std
导入std命令空间
//定义一个命令空间
namespace variable{
int a = 1;
float b = 1.1;
}
/*using namespace std
只导入其中的cout、endl
*/
using std::cout;
using std::endl;
int main() {
cout<< "C++" << endl;
using namespace variable;
cout<< a <<" "<< b << endl;
return 0;
}
C++
a = 1 b = 1.1
2)默认参数、函数重载、作用域运算符
- 如果同时存在相同变量名的全局和局部变量,使用
::
来操作全局变量
默认参数要注意:如果默认参数出现,那么右边的都必须有默认参数,也就是说只有参数列表后面部分的参数才可以提供默认参数的值.
-
函数重载规则:
- 函数名相同
- 参数个数、类型、顺序不同,均可构成重载
-
一个函数,不能既作重载,又作默认参数的函数
函数的重载与带默认值的函数一起使用时,有可能引起二义性:
void Drawcircle(int r=0,int x=0,int y=0)
void Drawcircle(int r)
当执行Drawcircle(20)
函数调用时,系统无法确定调用哪一个函数
int add(int a, int b = 20, int c = 30){
return a+b+c;
}
int a = 1;
int main(){
int a = 2;
std::cout<<a<<" "; //作用域运算符::
std::cout<<::a<<std::endl; //全局
std::cout<<add(10)<<" ";
std::cout<<add(10,10)<<" ";
std::cout<<add(10,10,10)<<std::endl;
}
2 1
60 50 30
3)new、delete的使用
C语言
中使用malloc
函数必须指定开辟空间的大小,即malloc(size)
,且malloc
函数只能从用户处知道应开辟空间的大小而不知道数据的类型.其返回值一律为void *
,使用时必须强制转换.C++
中提供了new
和delete
运算符来替代malloc
和free
函数.
差别:
malloc不会调用类的构造函数,而
new会调用类的析构函数.析构函数释放的是对象内部的内存,而
delete释放的是对象;由于
delete也触发析构函数,所以都可以释放
.
new int;//开辟一个存放整形数据的空间,返回一个指向整型数据的指针
new int(10);//开辟一个存放整形数据的空间,并指定初始值为100
new int[10];//开辟一个存放整形数组的空间 size=10
delete p;
delete []p;//释放数组空间的操作
// new 和 delete 使用
int main()
{
int *p1 = new int(10);
printf("*p1 = %d\n", *p1);
delete p1;
int *p2 = new int[10];
for(int i = 0;i < 10; i++)
p2[i] = i;
for(int i = 0;i < 10; i++)
printf("%d ",p2[i]);
printf("\n");
delete []p2;
return 0;
}
*p1 = 10
0 1 2 3 4 5 6 7 8 9