介绍c++
可以这样理解,c++是c语言的升级版,如果把c语言看作一个类,那么c++就是c语言的继承,也就是说,c++兼容c语言的所有语法,并且拥有自己的特定的语法,,c++是面向对象的语言,也可以基于过程的程序设计
特点:
- 封装性: 类是支持数据封装的工具,对象则是数据封装的实现。c++可以通过private
- 继承:在C++现有类的基础上可以声明新类型,这就是继承和重用的思想
- 多态性: 简单的说,一个父类可以被多个类继承,父类传给子类的数据可以一置,但在不同的子类中对这些数据进行不同的操作
为什么C++支持重载?C语言不支持?
重载就是存在多个函数名相同而参数不同的函数,注意:重载与返回值没有关系
承载的根本原因在于编译器对函数名的解释,具体点说,在c与原中,c编译器将函数名作为最终识别的主体内容,如果出现一个函数名相同的函数,不管参数想不想相同,直接取函数名,这样就会与前面一个函数名重复,在使用上,编译器不知道应该使用哪一个,所以重载在c语言中自然行不通过,而c++对函数名的解释规则有所不同,除了拿函数名做主要内容外,还会加上参数的缩写,所以即使函数名相同,只要参数不同,编译器就不会报错,也就自然支持重载。
#include
<iostream>
int
add(
int
a,
int
b) {
std::cout <<
"add(int int) = "
;
return
a + b;
}
double
add(
double
a,
double
b) {
std::cout <<
"add(double double) = "
;
return
a + b;
}
int
main()
{
int ret1 = add(3, 4);
int
ret2 = add(3.2, 4.2);
std::cout
<<
ret1
<<
std::endl;
std::cout
<<
ret2
<<
std::endl;
system(
"pause"
);
return
0;
}
实验结果:
缺省参数
在传参时,假设几个函数有三个参数,但是就算我一个参数也不传,代码也不会出错,原因是这个函数的参数有一个默认值,如果不传参,那么就会使用这些默认值,注意:对参数进行缺省时,要从右往左缺省
#include
<iostream>
int
add(
int
a = 1,
int
b = 1) {
std::cout <<
"add(int int) = "
;
return
a + b;
}
int
main()
{
int
ret = add(3, 4);
std::cout << ret << std::endl;
ret = add();
std::cout << ret << std::endl;
return
0;
}
实验结果:
命名空间
命名空间的存在是为了防止名字污染,假如没有命名空间,当一个工程相当庞大之后,其中就会因很多的对象名,函数名,类名形同,解决起来就会特别麻烦,耗时,降低开发效率。在这个背景下,命名空间的优势就很好的体现出来,解决了很多问题。
#include
<iostream>
namespace
A {
int
a = 10;
}
namespace
B {
int
a = 20;
}
int
a = 30;
int
main()
{
int
a = 40;
std::cout
<<
"A::a = "
<<
A::a
<<
std::endl; // :: 为作用于解析符
std::cout
<<
"B::a = "
<<
B::a
<<
std::endl;
std::cout
<<
"C::a = "
<<
a
<<
std::endl;
std::cout
<<
"D::a = "
<<
::a
<<
std::endl;
return
0;
}
实验结果