C++ 指针/引用/常规/CONST型成员的初始化与使用

来源:互联网 发布:c语言杨辉直角三角形 编辑:程序博客网 时间:2024/05/22 12:54

-Introduction:类成员函数的参数是 常规/指针/引用 都有什么区别

(1) 参数内容作为常规出现的时候代表了一种拷贝构造函数

(2) 参数内容作为指针出现的时候代表了一种aggregation的关系,使用最为便捷

  • 由于指针的灵活性还有不需要立刻赋值的特点,也导致其使用比较频繁
  • 这里所说的灵活性是指指针可以随时更换指向的对象

(3) 参数内容作为引用出现的时候代表了一种composition的关系,需要立刻初始化

  • 由于具备了不需要拷贝的特点,其高效性导致使用较为频繁

引用型内容初始化的一些注意事项

(1). 当类中数据成员是引用型数据成员,该如何初始化 (int& a)

  • 初始化列表。 A(int b) : a(b) 的方式初始化
    • 特点:并不具备引用的特点,修改其中一方并不会导致另一方的变化

(2). 当函数参数是引用型数据,该如何代入数据 function(int &c)

  • 直接代入。 function(c)
    • 特点:有引用的特点,在函数里修改c会导致c的变化

(3). 当函数参数是引用型对象,该如何代入现有对象 function(A& a)

  • 直接代入。 function(a)
    • 当时看到有function(&d)的用法,以为是引用的时候要加上&号,其实加上&是因为
    • d被初始化成了一个常规型对象,但是function定义的是要用指针型对象作为参数
    • 因此这里的本意其实是取地址的意思

Const类型有必要单独拿出来说一下,因为摆放的位置很多,不同的位置对应着不同的含义

  • 函数类型 - Const 型函数
    • 类成员函数拥有const类型,const可以放在两处位置:声明首,与声明末尾
 1.    const int function(){ ... }         例如const int 这个代表所返回的函数值是const int类型的数据 2.    function () const { ... }       这个函数不能修改类中的数据,但是对应的,只有类成员函数才可以这么写,非类成员,常规函数无法       使用这个特性       //注意,这个不只代表"类数据"无法修改,不保证函数形参能不能修改       //也就是说,只在"类函数"末尾加上const,"函数参数"可以修改,"类数据"不能修改

函数参数 - Const 类型的形参 * <-犯过错误这里*

1.     function ( const int& u )            形参中加上const字样,代表函数参数无法修改            也就是以上的int u是无法修改的    (1). 相比于函数类型const只能应用于类函数,这种const类型参数可以应用于类函数+常规函数          (2). 函数调用的时候,填入的内容 :   "常量变量"  "临时赋值数据"  "类对象",请看以下 :(1).A(const int &a)  --实现->   A(3)    3被临时标记为常量整数   -->不报错(2).A(const int &a)  --实现->   int y = 5 ; A(y)  -->  不报错,y被临时转换成const类型(3).A(const string &a)  --实现->  string a ; A(a)  -->  不报错,类型临时转换但是,但hai...有的就是不能临时转换(4). A(const string* &a)  --实现->  string* a = new string ; A(a)  -->但是这就是报错     //因为在声明里说了会用const类型的指针,但是你没用,此外,我们也没给它自动类型转换    const string* a = new string ;  套用正确     Summary: (1//确定只有临时数据  或者  常规数据(非指针)  或者   类对象数据会传过来                    就可在形参前面加上const关键字              (2) 但是指针是没法转换的,而且也没人用const指针,涉及指针传过来,就不要在形参里加上const
  • 类的数据成员 - Const类型的数据
1.声明:     Const int a;2.初始化:    A(b): a(b);              初始化列表的方式初始化一个const数据,方式等同于引用型数据成员3.调用:       const类型的数据成员必须被const类型的函数成员调用,常规类型的函数成员无法调用            //但是const类型的函数成员,除了可以调用const类型数据成员,还能调用其他类型的数据
  • Const类型的initializer_list 因为ini_list比较特殊,单独说一下
initializer_list与const函数参数一致,都是const initializer_list<int> target

const的类函数 + const参数 报错引用实例

void function (const A &a) { ... }void function_1 () const {      function (this)          //正确版本,编译通过}

但是以下就不通过

原创粉丝点击