码迷,mamicode.com
首页 > 编程语言 > 详细

第10课 C++中的新成员

时间:2016-04-10 19:25:02      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

1. 动态内存分配

(1)C++通过new关键字进行动态内存申请,是以类型为单位来申请空间大小的

(2)delete关键字用于内存释放

 技术分享

▲注意释放数组时要加[],否则只释放这个数组中的第1个元素。

【实例分析】C++中的动态内存分配

#include <stdio.h>

int main()
{
    int* p = new int;

    *p = 5;
    *p = *p + 10;

    printf("p = %p\n", p);  //p保存堆上开辟空间的地址
    printf("*p = %d\n", *p);//15

    delete p;


    p = new int[10];//申请10个int型空间

    for(int i=0;i<10; i++)
    {
        p[i] = i + 1;
        printf("p[%d] = %d\n", i, p[i]);
    }

    delete[] p; //注意:释放数组时[]不能漏掉

    return 0;   
}

2. new关键字

(1)对比new和malloc

 

new

malloc

性质

是个关键字,属C++的一部分

是由C库提供的函数

申请单位

以具体类型为单位

字节为单位

内存初始化

申请单个类型变量时可进行初始化

不具备内存初始化的特性

(2)new关键字的初始化

  int* pi = new int(1);

      float* pf = new float(2.0f);

      char* pc = new char(‘c‘);

【编程实验】初始化动态内存

#include <stdio.h>

int main()
{
    int* pi = new int(1); //开辟1个int型空间,并初始化为1
    //int* pa = new int[1];//注意,这时申请一个数组,与前一行含义不同

    float* pf = new float(2.0f);
    char* pc = new char(c);

    printf("*pi = %d\n", *pi); //1
    printf("*pf = %f\n", *pf); //2.000000
    printf("*pc = %c\n", *pc); //c

    delete pi;
    delete pf;
    delete pc;

    return 0;   
}

3. C++中的命名空间

(1)在C语言中只有一个全局作用域

  ①C语言中所有的全局标识符共享同一个作用域

  ②标识符之间可能发生冲突

(2)C++中提出了命名空间的概念

  ①命名空间将全局作用域分成不同的部分

  ②不同命名空间中的标识符可以同名而不会发生冲突

  ③命名空间可以相互嵌套

  ④全局作用域也叫默认命名空间

(3)C++命名空间的定义:namespace Name {}

(4)命名空间的使用

  ①使用整个命名空间:using namespace name;

  ②使用命名空间中的变量using name::variable;

  ③使用默认命名空间中的变量: ::variable

【实例分析】命名空间的使用

#include <stdio.h>

namespace First
{
    int i = 0;
}

namespace Second
{
    int  i = 1;

    //命名空间的嵌套
    namespace Internal
    {
        struct P
        {
            int x;
            int y;
        };
    }
}

int main()
{
    using namespace First;//使用First整个命名空间
    using Second::Internal::P;//使用命名空内部的P结构体

    printf("Fisrt::i = %d\n", i); //0。可以直接写i,因为使用了First整个命名空间
    printf("Second::i = %d\n", Second::i);//1。须带命名空间的名字

    P  p = {2, 3};

    printf("p.x = %d\n", p.x);//2
    printf("p.y = %d\n", p.y);//3

    return 0;   
}

4. 小结

(1)C++中内置了动态内存分配的专用关键字

(2)C++中的动态内存分配可以同时进行初始化

(3)C++中的动态内存分配是基于类型进行的

(4)C++中命名空间概念用于解决名称冲突问题

第10课 C++中的新成员

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5374955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!