zoukankan      html  css  js  c++  java
  • c++:class,名字空间等

    一.名字空间
    C语言中的名字空间的划分:全局,局部,块
    C++认为全局空间用起来非常方便,但如果把太多的东西放在全局空间中,会造成命名冲突,所以引用
    了一种机制就是名字空间;
    名字空间:把全局的命名空间进一步分割,可以创建出一个个独立的命名空间防止相互之间的冲突
    1. 定义名字空间:
    namespace name
    {
    变量
    函数
    结构,类
    }
    使用: name::变量
    2. 名字空间的合并
    a. 同名的命名空间会自动合并
    b. 在同一个名字空间中只是标识符必须是唯一的

    3. 定义与声明分开
    namespace n1 //在名字空间中声明函数
    {
    void func(void)
    }
    //在名字空间中定义函数
    void n1::func(void)
    {

    }
    4. 如何使用名字空间中的内容
    1. 域限定符(::)直接使用,名字空间::标识符
    2. using namespace 名字空间;功能是把名字空间中的标识符对之后的代码全部公开
    3. using 名字空间::标识符,表示此标识符对后面的代码公开

    5. 名字空间的嵌套
    名字空间可以嵌套,但使用的时候要逐层解析
    namespace nn
    {
    int n = 10;
    namespace nm
    {
    int n = 20;
    namespace mm
    {

    }
    }
    }
    6. 默认全局空间归属为匿名空间
    在全局空间定义的标识符都属于这个匿名空间,匿名空间默认开放
    如果函数中有重名的标识符,会把匿名空间中的屏蔽了。可以使用空的域限定符表示它

    注意:不同命名空间中的同名函数不构成重载,重载必须发生在同一作用域下;
    二.class
    1. C++的class与struct一样,是一种复合数据类型
    2. 里面可以有变量用来表达属性,函数用来表示行为;
    3. 在C++中的class与struct,几乎没有任何区别
    4. struct 默认访问属性时public,class中的默认的访问属性是private,
    5. 在C++中默认使用class,以示与C语言中的struct进行区分

    三.class的构造结构
    1. 在创建对象时自动调用的函数,在整个对象的生命周期中一定会被调用一次,且只能被调用一次;
    2. 在构造函数中负责对成员变量的初始化,分配资源,设置对象的初始状态
    3. 构造函数可以有多个版本,他们之间会构成重载,创建对象时方法不同,给的参数不同会调用相应的构造函数
    如果调用的构造函数不存在就会造成编译错误
    //无参构造
    Student stu <=> Student *stu = new Student
    4. 如果类中没有定义构造函数,编译器会自动生成一个无参构造
    一旦定义了其他版本的构造函数,无参构造就不会生成了,因此为了防止无参方式创建对象出错,在定构造函数时,至少要实现两个
    5. 无参构造未必无参,在C++中函数可以有默认参数,如果有参构造全部设置了默认参数,就会和无参构造有冲突,他们两个只能用一个
    6. 所谓的"编译器生成的某某函数",并不是真正意义上的函数,编译作为指令的生成者,只要生成具有
    某些函数的功能的指令即可,没有生成高级语言的主义以上的函数
    7. 什么时候调用无参构造
    1. Student stu <=> Student *stu = new Student
    2. 创建对象数组,每个对象都会调用一次无参构造
    3. 如果类A中有成员类B,当执行完类A构造函数前,就执行类B的构造函数
    4. 在类A中如何调用类B的有参构造
    类A(参数列表):成员类B(参数列表)
    {
    ...
    }
    8. 类型转换构造函数
    用一个数据给对象初始化,默认会自动调用构造函数,达到类型转换的效果
    这种方式虽然使用方便,但也会包容一些错误存在,如果想让代码检查更为严格可以使用explicit关键字禁止隐式转换的方式调用构造函数

    9. 也可以实现自动类型转换构造函数(默认的)

  • 相关阅读:
    numpy的文件存储 .npy .npz 文件
    Google词向量word2vec的使用
    Python函数-logging.basicConfig
    现货黄金-20180918
    Pandas的loc方法
    Pandas的index属性
    python调用exe程序
    Pandas的concat方法
    转载:为什么选择Nginx(1.2)《深入理解Nginx》(陶辉)
    discuz3.4:在Centos6.5中安装过程
  • 原文地址:https://www.cnblogs.com/gumpzlc/p/9439327.html
Copyright © 2011-2022 走看看