关于C++的一些问题

1,this指针

 

   什么是this指针,简单说就是当前 对象本身。比如:程序1    如程序1所示运行结果得到两个相同的地址,即this指向当前对象的起始地址,通过this可得到对象的各种属性。


程序1
class A
{
public :
    A(int a=0):i(a){}         
    void test()
    {
          cout<<this <<endl;//this指向当前实例化的对象
    }
private:
    int i;
};

int main()
{
    A a;
    cout<<&a <<endl;
    a.test();
    getchar();
    return 0;
}

 

2,const函数

 

    为什么要在函数的结尾添加一个const,原因是为了防止该函数修改当前对象的属性。如在程序1再修改函数 test() 程序2,如程序所示将test声明为const后再++i,此时将出现编译错误,原因是你的任意一个函数声明都有一个隐式的this指针,这个参数不可见是编译器自动添加上去的 而 void test()const 相当于void test(const A *this) *this即是当前对象,声明为const则不可改变当前对象的属性


程序2

class A
{
public :
    A(int a=0):i(a){}         
    void test()const      //相当于void test(const A *this)
    {

          ++i;         //error 声明为const 的函数不可修改当前对象的属性  
          cout<<this <<endl;//this指向当前实例化的对象
    }

 

   const int& test1()

   {

     return i;

   }
private:
    int i;
};

  如果在前面加上const会出现什么情况呢?这是const会修饰返回值,如程序2 如果有语句 a.test1()=2;此时将出项编译错误,提示不能访问const变量。即前面加上const用来防止修改该函数的返回值。

    注:const修饰符还是重载的标志。


3,赋值操作符的重载


   为什么赋值操作符重载函数要返回当前对象的引用,原因是要使自定义类型和内置类型有一样的行为,如int a,b,c  ; a=b=c;内置类型可以有这样的操作,同样的类类型也应有这样的操作,如程序3,但C++并没有规定一定要返回引用,注意即使返回的不是引用 a=b=c这样的操作也可以完成,应为返回值是一个临时对象此时用临时对象也可完成此操作,但如果是这样的 (a=b)=c 非引用函数无法完成此操作,原因首先进行a=b计算完成后产生一个临时对象,再用c给一个临时对象赋值没有意义,假如是引用则a=b返回a的引用,再用c给a赋值此时此时合法的。


程序3

class A
{
public :
    A(int a=0):i(a){}         
    void test()const
    {

          ++i;         //error 声明为const 的函数不可修改当前对象的属性
          cout<<this <<endl;//this指向当前实例化的对象
    }

   const int& test1()

   {

     return i;

   }

   A& operator=(const A &a)

   {

    if(this==&a)

        return *this;

    i=a.i;

    return *this;

   }


private:
    int i;
};

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值