首页 > 编程语言 >C++_14_常量指针—this指针 - 重写版

C++_14_常量指针—this指针 - 重写版

时间:2023-11-05 23:25:56浏览次数:36  
标签:函数 title 对象 price C++ 指针 成员 14

常量指针—this指针

  this指针:成员函数一般都会拥有一个常量指针(this),指向调用函数的对象,储存的是改对象的首地址(注意:静态成员函数是没有this指针的)

//标准写法
class book
{
public:
    book(){this->price = 0.0; this->title = NULL;}
private:
    double price;
    char * title;
};
//常用写法(省略this)
class book
{
public:
    book(){price = 0.0; title = NULL;}
private:
    double price;
    char * title;
};

//两种写法收拾正确的

通常我们在设计成员函数时会将形参与成员变量设计成同一个名字,如下所示,此时函数定义的时候price = price;这样的程序看起来总是有些别扭的。这个使用如果使用 this 指针则就能很明朗的进行区分两个 price 了。

class book
{
public:
    void setprice(double price)
    {
        this->price = price;
    }
private:
    double price;
    char * title;
};

  利用 this->price 表明前面一个 price 为类中的成员变量,而后面一个 price 为形参中的 price。this 指针在此时避免命名冲突产生理解上的歧义。

  this 指针是常量指针,它的值是不能被修改的,一切企图修改该指针的操作如赋值、递增、递减等都是不允许的。
  此外 this 指针只非 static 成员函数中才是有效的,因为static成员函数是属于类的公有资源没有this指针

/**
*    this指针:
*    C++ 中数据和方法是分开存储的,数据独有,方法共有
*    数据存储在对象中;方法是定义在类中(存放在代码区),所有对象所共有
* 
*    当一个对象,调用方法时候,会在此方法中产生一个this指针(默认隐藏)
*  (this指针主要是为成员变量服务) * this指针指向调用方法的对象(指向对象,对应的也就是指向对象所有的成员变量) * * 注意: * 1、this指针是隐含在对象成员函数内的一种指针 * 2、成员函数通过this指针,就可以确定指向操作对应对象的数据 * 3、static静态成员函数内部没有this指针(只有私有的函数才会生成this指针) * * 应用: * this -> price = price; // this指针主要是为对象的成员变量服务 * 左边-this指针表示当前对象的成员变量,右边就是形参传入的变量 */ #include<iostream> using namespace std; class Mycount { public: Mycount& mycount(const char *str) { cout << "str = " << str << endl; return *this; //*this代表的就是当前调用函数的对象 // 相当于 obc.mycount() == obc } private: }; int main() { Mycount obc; obc.mycount("this").mycount("is").mycount("point!"); return 0; }

 

标签:函数,title,对象,price,C++,指针,成员,14
From: https://www.cnblogs.com/zlxxc/p/17811499.html

相关文章

  • C++_22_string类型 - 重写版
    string类型·变量定义C++中提供了一个string内建数据类型,它可以替代C语言中的char*数组。使用string数据类型时,需要在程序中包含头文件<string>#include<iostream>#include<string>usingnamespacestd;intmain(){strings1;//......
  • C++_21_重载、重写、重定义 - 重写版
    1、重载同一作用域的同名函数,重复定义;参数格式、参数顺序或者参数类型不同;函数重载和函数的返回值没有任何关系;(const类型的重载本质上是参数类型不同) 2、重写(覆盖)有继承关系子类(派生类)重写父类(基类)的虚函数函数的返回值,函数名字,函数参数,必须和基类中的虚函数一致,主要就是覆盖......
  • C++_20_操作符重载和函数重载 - 重写版
    操作符(运算符)重载 操作符重载指的是将C++提供的操作符进行重新定义或者多重定义,使之满足我们所需要的一些功能。在C++中,经常有需要对多个对象进行算术运算,但是对象比不是基本的数据类型,所以这些运算符都无法执行。为了让程序识别这些运算符,就需要对运算符进行重载......
  • C++_19_虚函数、纯虚函数和抽象类 - 重写版
    虚(成员)函数:在C++中,只有类中的成员函数能被声明为虚函数,顶层函数则不能被声明为虚函数;并且如果在类内声明类外定义,则只在类内声明时加virtual声明虚函数是为了构成多态,多态需要继承关系,需要在类中声明;虚函数能被继承:基类被声明为虚函数,那么派生类即便未添......
  • C++_25_函数模板和类模板 - 重写版
    模板:在C++中允许函数重载,但函数重载每次都必须完全对上参数的顺序,类型和数量。所以C++提供了另一种代码重用机制——“模板”,可以作为同一种类型函数的统一调用接口。模板机制下可划分:1、函数模板      2、类模板模板的语......
  • iwtgm-14
    没时间了,只补了一个小题,自己尝试证明了下结论哈哈,还挺不错的华中D把线分成两种:一种是只影响一个正方形的,就是最外围的那一圈,是偶数条一种是影响两个正方形的(公共边),也是偶数条已知偶数位是必胜态后手只要跟着先手走,先手选最外围的走,后手就选最外围的走,先手选公共边走,后手就......
  • C++_28_空指针、野指针、智能指针 - 重写版
     野指针:没有明确执向的指针,可能会胡乱指向任意一个变量;编程的时候绝不允许出现野指针;int*p;//错误,未初始化指向一块地址,会变成野指针如果确实需要先不指定到需要使用的内存,那就先定义一个空指针;-------》宁愿指向为空也不要为野;因为野指针你把握不住; 空指针:让指针指向N......
  • 实验三 类与数组,指针
    Task1:point.hpp:#pragmaonce#include<iostream>usingstd::cout;usingstd::endl;classPoint{public:Point(intx0=0,inty0=0);~Point()=default;intget_x()const;intget_y()const;voidshow()const;voidm......
  • 类与数组、指针
    任务1point.hpp#pragmaonce#include<iostream>usingstd::cout;usingstd::endl;classPoint{public:Point(intx0=0,inty0=0);~Point()=default;intget_x()const;intget_y()const;voidshow()const;voidmove(intnew_x,i......
  • C++_02_命名空间和作用域运算符 - 重写版
    命名空间在C++中命名空间(namespace)的作用:命名空间,就是为了解决同一个源代码中相同命名的变量或者函数之间相互冲突的问题,就是要避免这种冲突,让程序代码中可以多次使用同一个标识符而存在的。对于一名开发者而言,代码量过于庞大,或多或少会忘记之间之前用过的变量名或函......