const用法总结

#include<iostream>
using namespace std;

int test_cincan(const int c){
//    c++;//3、const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;
    return c;
}

int test_cuanp(const int *t){//3、在传指针或者引用的时候可以保护实参所指的变量
//    *t = *t + 1;
//    (*t)++;
//    *t++;//要是这么写,返回就是0
    return *t;
}

class complex{

public:
    //1、如果【类的成员变量】有const类型的变量,那么该变量必须在类的初始化列表中进行初始化
    complex (double r = 0,double i = 0,int a = 0):re(r),im(i),as(a) {}//

    complex& operator +=(const complex&);

    //下面这些都是常函数,也就是const成员函数
    double real() const{return re;}//常函数(常成员函数),const位于成员函数的后面
    double imag() const{return im;}//const成员函数访问【非const数据成员】
    double test_const() const{return as;}//const成员函数访问【const数据成员】
//    double test_2() const{return im++;}//4、【常函数】不能修改类的【数据成员】

    //下面这些是非const成员函数
    double test_3() {return re;}//非const成员函数访问【非const数据成员】
    double test_4() {return as;}//非const成员函数访问【const数据成员】


private:
    double re,im;//1、const类型变量必须定义的时候进行初始化
    const int as;

};

int main(){
    complex c1(2,1,10);
    const complex c2(2,1,11);//常对象,const位于对象前面
    cout<<c1.imag()<<endl;//6、【const成员函数】可以访问 【非const对象】的【非const数据成员】
    cout<<c1.test_const()<<endl;//6、const成员函数可以访问 非const对象的【const数据成员】
    cout<<c2.imag()<<endl;//6、【const成员函数】可以访问 【const对象】的【非const数据成员】
    cout<<c2.test_const()<<endl;//6、【const成员函数】可以访问 【const对象】的【const数据成员】


    cout<<c1.test_3()<<endl;//7、【非const成员函数】可以访问【非const对象】的【非const数据成员】
    cout<<c1.test_4()<<endl;//7、【非const成员函数】可以访问 非const对象的【const数据成员】
//    cout<<c2.test_3()<<endl;//7、【非const成员函数】不可以访问【const对象】的【所有成员数据】
//    cout<<c2.test_4()<<endl;

//    const complex c2(2,1,11);//常对象,const位于对象前面
//    cout<<c2.test_3()<<endl;//4、【类的常对象】只能访问【类的常成员函数】
    cout<<c2.imag()<<endl;


    //上面的是类里面的操作,下面的是一些const的基本操作
    int test2 = 10;
    cout<<test_cincan(test2)<<endl;//3、const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

    int *test_p = &test2;
    cout<<"测试传指针的时候加const:"<<test_cuanp(test_p)<<endl;


    int const test3 = 10;
    int * pv = const_cast<int *>(&test3);
    cout<<"测试const_cast:"<<pv<<endl;
    *pv = 20;
    cout<<"测试const_cast:"<<pv<<endl;


//    const int te;//1、定义const变量的时候通常要初始化
//    te = 10;//1、阻止变量被改变

    //2、const和指针的三种情况
    int test1 = 1;
    int qwb = 111;
    int const *p1 = &test1;//和const int *p1 = &test1;一样//2、指定【指针本身】为const
    int *const p2 = &test1;//2、指定 指针所指的数据为const
    int *p3 = &test1;

    int const *const p4 = nullptr ;
//    *p4 = 10;

//    *p1 = 30;///2、*p1的值不可以改变
    *p2 = 30;
    *p3 = 10;

    p1 = &qwb;//2、*p1的值不可以改变,但可以通过给p赋值不同的地址改变这个指针指向。底层指针表示指针所指向的变量是一个常量
//    p2 = &qwb;//2、p2的值不可以改变
    p3 = &qwb;


    cout<<&test1<<endl;
    cout<<p1<<endl;
    cout<<*p1<<endl;
    cout<<p2<<endl;

    //8、对于函数,const可以放三个位置:1、修饰返回值(导致不能做左值)2、修饰参数3、修饰函数

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书运用现代工具对计算机科学进行传统的介绍。作为计算机领域的科学家,很幸运能够给学生介绍一种易于实践、使人满足并且需要不断深入才能掌握的活动,即编程。正如大多数计算机科学家一样,我相信编程始终是计算机科学的核心主题。因此,本课程的目的是教学生怎样编写程序。 虽然本书在形式上保持了传统风格,但也使用了许多新技术,主要表现在三个方面: ● 所用的编程语言是一个C++子集。虽然将C++作为一门完美的教学语言还相去甚远,但其本身是一门十分注重实效的语言。在软件界中,C++是应用十分广泛的编程语言。在所有主要平台上都有便于使用的C++编程环境。特别是,C++在介绍编程思想方面具有极大优势。本书通过使用标准C++语言的新特性,如引用参数、流库、string类以及vector模板,从而最大限度地避免使用易于出错的程序结构。指针也只主要应用在多态和链表的实现上。 ● 较早引入对象。本书分两个阶段介绍对象。从第2章开始,学生开始学习使用对象,特别是流对象、字符串对象、简单的Time和Employee类实例以及图形对象。本书按照传统方式逐步地介绍分支、循环、函数和过程,并在这一过程中使学生逐渐了解对象、调用成员函数等概念。然后,在第6章开始学习如何实现类和成员函数。 ● 可选图形编程。学生一般都喜欢图形编程,本书包括很多可视化信息的练习。为此,本书使用一个在许多流行平台上都可以得到的简单图形库。与传统的图形库不同,该库在对象使用上更加直接、有效。该简单图形库的使用同样是可选的。此外,在第18章中通过使用一个类似于Microsoft基本类库(MFC)的开放源代码工具包来介绍图形用户界面编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值