C++入门篇

一.介绍一下C++
C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持并需要使用。C plus plus(C++),所以在C的基础上又有了很多新的特性。

类型比较:相比C,C++显著的特点是有了对象
what???对象??
是的,C++也是面向对象编程语言之一。
what??面向对象??那没有对象,怎么办??
new一个。

在C++里,这里的面向对象,最大的特点就是有了的概念

对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中。

在类和对象之后,相比C语言,C++还有继承和多态、模板和泛型、异常处理、C++库和标准模板库等。

二.为什么C++支持函数重载?C语言不支持
重载:
1、因为Cpp在函数调用的时候,call指令是带着函数名和参数类型去调用函数的,所以参数不同,所调取的函数就不同。
例如:

#include<iostream>
using namespace std;


void Test()
{
    cout << "This is a test." << endl;
}
void Test(int a)
{
    cout << "the resut is  " << a << endl;
}
int main()
{
    int a = 10;
    Test();
    Test(a);
    system("pause");
    return 0;
}

这里写图片描述
在Cpp的程序中,Main函数可以根据参数列表不同而调用不同的Test()函数。
2、需要注意的是:函数返回值类型不是重载函数的调用时选择的的依据。

3、而C语言在调用函数时候只是用函数名去调用,如果出现两个相同函数名的函数,编译器无法区分,就会报错。不支持函数重载。

三.缺省参数
1、所谓的函数缺省参数就是,我在定义函数的时候会给我的函数形参赋默认值,如果你在调用我的函数时候,你没有给我的参数,那么编译器就会调用我给的默认值,称之为调用了缺省的参数。

#include<iostream>
using namespace std;


void Test()
{
    cout << "This is a test." << endl;
}
void Test(int b,int a=20)
{
    cout << "the resut is  " << a+b << endl;
}
int main()
{
    int b = 10;
    Test(b);
    system("pause");
    return 0;
}

这里写图片描述
调用Test()函数时,参数b给了实参,而a并没有给实参,a被定义为缺省参数,在没有被实例化时候,a可以用默认值20来来跑。
而给了实例参数,它就不会再用缺省值了。
这里写图片描述
2、需要注意的一点是:在定义函数时候,如果用到缺省参数,一定要从右向左缺省。也就是说,非缺省参数定义完,才能定义缺省的。

3、函数重载和带默认值的函数一起使用存在二义性:

int Add(int w);
int Add(int a=10,int b=20,int c=30);

当调用

Add(x);

出现重函数定义错误。
4、如果函数定义在函数调用之后,在函数声明中给出默认值,在函数定义时就不要给出默认值了(可能出现“重复定义默认值”的报错)

四.命名空间
命名空间是C++独有的文件域(全局域)。用namespace开头来定以
namespace student
{
char*name;
int age;
}

#include<iostream>
#include<Windows.h>
namespace student
{
    char* _name = "xiaowei";
    int _age = 22;
}
namespace teacher
{
    char* _sex = "男";
}
int main()
{
    std::cout << student::_age << std::endl;
    using namespace teacher;
    std::cout << _sex << "\n";
    system("pause");
}

这里写图片描述
你发现了什么?是的,在需用调用命名空间里的成员时:
要么使用空间名字::
::被称之为作用域解析符。
要么使用using namespace 空间名字

而常见的using namespace std;是调用了C++标准库里的所有成员。
这样使用显然没有std::效率高,因为std::限定了域,就直接访问。
而using namespace std;则需要把库里的所有能够成员展开,开销就大了,形成了命名空间污染的问题。

猜你喜欢

转载自blog.csdn.net/Vickers_xiaowei/article/details/80634109