您的位置:首页 > 编程语言 > C语言/C++

c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)

2017-03-20 17:04 686 查看
=====================

2016-8-27

=====================
主题:

    1.c++输入输出

    2.namespace 命名空间

    3.引用和函数引用参数

    4.内联函数inline

    5.函数重载,默认参数的函数,函数模板

    6.内存管理


1.c++ 输入输出

=====================

//cin cout 可以自动识别基本数据类型

    cin      //输入

    cout     //输出

    随用随定义以

    bool 数据类型

    

    bool b = 1;  //定义布尔类型

    cout<<boolalpha<<b<<endl;  //以布尔类型输出

    bool x = false;     //假

    bool x = true;      //真

#include<iostream>   //数据输入输出流

#include<stdlib.h>

using namespace std;   //命名空间

int main(void)

{

    int a = 0;

    cout<<"请输入一个整数"<<endl;

    cin>>a;

    cout<<oct<<a<<endl;  //8进制输出

    cout<<dec<<a<<endl;  //10进制输出,不写类型默认输出十进制

    cout<<hex<<a<<endl;  //16进制输出

    cout<<"请输入一个布尔值0或者1"<<endl;

    bool b = 1;  //定义布尔类型

    cin>>b;

    cout<<boolalpha<<b<<endl;  //以布尔类型输出

    

    

    return 0;    

}

-----------------------------------------------------------------------------------------------------------------
2.命名空间: namespace

=============================

:: 作用域运算分解符

-----------------------

#include<iostream>

#include<stdlib.h>

using namespace std;

namespace A

{

    int x = 3;

    void fun()

    {

        cout<<"A"<<endl;    

    }

    

}

namespace B

{

    int x = 10;

    void fun()

    {

        cout<<"B"<<endl;    

    }

    

}

using namespace B;  //不用作用域分解运算符则默认用B空间

int main(void)

{

    cout<<A::x<<endl;  //引用A空间  :: 作用域分解运算符

    cout<<x<<endl;  //使用B空间

    A::fun();

    fun();

    

    return 0;    

}

-------------------------------------------------------------------------------------------------------
3.引用:给变量起别名

============================

c++的函数参数传递:

(1).按值传递

(2).按引用传递,避免复制大量数据的开销,可以提高性能,按值传递如果数据量较大,复制数据将导致较长的执行时间

(3).引用时要赋初值

    int a = 10;

    int &b = a;

&只有在生明引用时是引用操作符,其他时候都是取地址

引用和指针的区别:

    (1).指针是个变量,可以把它再赋值成纸箱别处的地址

    (2).建立引用时必须进行初始化并且决不会再关联其他不同的变量

    (3).有空的指针但是没有空的引用

    数据类型  &引用名(别名)  =   变量;

    指针引用;

    数据类型  *&引用名    =   指针;

    int a = 10;

    int *p = &a;

    int *&q = p;

    *q = 20;     //等价于 *p = 20;

#include<iostream>

#include<stdlib.h>

using namespace std;

struct st

{

    int x;

    int y;

};

void fun(int &j, int &k)

{

    int tmp;

    tmp = j;

    j = k;

    k = tmp;

}

int main(void)

{

    int a = 3;

    int &b = a;  //引用

    b = 5;

    

    int x = 10;

    int *p = &x;

    int *&q = p;  //指针的引用

    *q = 20;

    

    struct st s;

    struct st &d = s;  //结构体的引用

    d.x = 100;

    d.y = 200;

    cout << b << endl << *q <<endl;

    cout<<d.x<<endl<<d.y<<endl;

    

    int i = 20;

    int j = 30;

    cout<<i<<endl<<j<<endl;

    return 0;

    

}

4.inline 内联函数

==================

定义:编译器在看到inline后,为该函数创建一段代码,以便在后面每次碰到该函数的调用都用一段代码来替换,\

以便有更快的调用速度,多次调用的函数

内联函数的声明:

(1).内联函数可以在一开始仅声明一次

(2).内联函数必须在调用之前被声明或定义,因为内联函数的代码必须在被替换之前已经生成被替换的代码

(3).内联函数中不能使用复杂的结构语句

=================

2016-08-29

=================

4.(1).函数重载:

==================

在同一作用域下函数的行参个数或者数据类型不同

    

func(int a, int b); | func(int a); | func(double a, double b);    //函数重载

(2).函数参数默认值:在c++中函数的参数允许有默认值

    func(int i = 1, int j = 2, int k = 3);

默认参数的顺序规定:

    如果一个函数中有多个默认参数,则形参分布中,默认参数应从右向左逐渐定义,当调用函数时只能从左向右匹配参数

(3).函数模板

模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发

泛型编程:独立于任何特定类型的方式编写代码

函数模板的定义形式:

template<类型形式参数表> 返回类型 FunctionName(形式参数表)

{

    //函数定义体    

}

------------------------------

#include <iostream>

using namespace std;

//函数模板

template<typename T>

T abs(T x)

{

    return x<0?-x:x;

}

int main(int argc, char *argv[])

{

    int n = 5;

    double b = -6.6;

    cout<<abs(n)<<endl;

    cout<<abs(b)<<endl;

    return 0;

}

(4).内联函数:

    inline: 建议性的,编译时将函数代码嵌在调用处,省去调用的时间

---------------------------------------------------------------------------------------

5.内存管理:

=================

运算符:new     申请内存

       delete  释放内存,释放后置成 NULL

    

#include<iostream>

#include<stdlib.h>

/* 内存管理运算符:

 *     new      //申请内存

 *    delete   //释放内存

 */

using namespace std;

int main(void)

{

    int i;

    int *p = new int(100);    //申请并赋初值

    if(p == NULL)   //校验是否申请成功

    {

        return 0;     

    }

//    *p = 100;                 //两种赋初值方法

    cout<<*p<<endl;

    delete p;      //用完释放

    p = NULL;

    int *arr = new int[4];    //申请块内存,与数
4000
组的使用相同

    for(i = 0;i<4; i++)

    {

        arr[i] = i+10;

        cout<<arr[i]<<endl;    

    }

    delete []arr;   //释放块内存

   arr = NULL;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++基础知识
相关文章推荐