zoukankan      html  css  js  c++  java
  • 对象的常指针和常引用

    -----------------siwuxie095

       

       

       

       

       

       

       

       

       

    对象的常指针 对象的常引用

       

       

    看如下实例:

       

    定义一个坐标类:Coordinate

       

       

       

       

    在实现时:

       

       

       

       

    在使用时:

       

    1)如果使用对象指针和对象引用

       

       

       

    2)如果使用对象的常指针和对象的常引用

       

    因为 coor2 是常引用,只具有读权限,而 getX() 的隐藏参数 this,

    却要求读写权限的参数,同理,pCoor 是常指针 …

       

       

       

       

       

    下面是一种更复杂的情况:

       

    这里的 const 在 * 和 pCoor 之间,一旦指向了 coor1,就不能再

    指向另外的对象了

       

    pCoor 虽然用 const 修饰了,但它的修饰位置却在中间,意味着它

    不能再指向其他对象,但它本身所指向的对象的内容却是可变的,即

    pCoor 是一个具有读写权限的指针(只限于它指向的对象可以读写)

       

       

       

       

       

       

       

    程序:

       

    Coordinate.h:

       

    class Coordinate

    {

    public:

    Coordinate(int x,int y);

    ~Coordinate();

    void setX(int x);

    int getX();

    void setY(int y);

    int getY();

    void printInfo() const;

    private:

    int m_iX;

    int m_iY;

    };

       

       

       

    Coordinate.cpp:

       

    #include "Coordinate.h"

    #include <iostream>

    using namespace std;

       

       

    Coordinate::Coordinate(int x, int y)

    {

    m_iX = x;

    m_iY = y;

    cout << "Coordinate()" << endl;

    }

       

    Coordinate::~Coordinate()

    {

    cout << "~Coordinate()" << endl;

    }

       

    void Coordinate::setX(int x)

    {

    m_iX = x;

    }

       

    int Coordinate::getX()

    {

    return m_iX;

    }

       

    void Coordinate::setY(int y)

    {

    m_iY = y;

    }

       

    int Coordinate::getY()

    {

    return m_iY;

    }

       

    void Coordinate::printInfo() const

    {

    cout << m_iX << "," << m_iY << endl;

    }

       

       

       

    main.cpp:

       

    #include <stdlib.h>

    #include "Coordinate.h"

    using namespace std;

       

       

    int main(void)

    {

    Coordinate coor1(3,5);

    Coordinate coor2(7, 9);

    //对象的常引用 只能调用常成员函数

    const Coordinate &coor3 = coor1;

    //对象的常指针 还可以指向其他对象 只能调用常成员函数

    const Coordinate *pCoor1 = &coor1;

    //只能指向coor1 不能再指向其他 但是可以调用所有的函数(常成员函数和普通成员函数)

    Coordinate *const pCoor2 = &coor1;

       

    coor3.printInfo();

       

    pCoor1->printInfo();

    pCoor1 = &coor2;

    pCoor1->printInfo();

       

    pCoor2->setX(11);

    pCoor2->printInfo();

       

    system("pause");

    return 0;

    }

       

       

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    Codeforces Round #344 (Div. 2) C. Report 其他
    Codeforces Round #344 (Div. 2) B. Print Check 水题
    Codeforces Round #344 (Div. 2) A. Interview 水题
    8VC Venture Cup 2016
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂
    CDOJ 1279 班委选举 每周一题 div2 暴力
    每周算法讲堂 快速幂
    8VC Venture Cup 2016
    Educational Codeforces Round 9 F. Magic Matrix 最小生成树
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6798419.html
Copyright © 2011-2022 走看看