美文网首页
[C++之旅] 17 常对象成员和常成员函数

[C++之旅] 17 常对象成员和常成员函数

作者: Onicc | 来源:发表于2018-11-27 15:17 被阅读0次

[C++之旅] 17 常对象成员和常成员函数

一、常对象成员和常成员函数

常对象成员

常对象成员:对象成员采用const修饰

例如线段Line这个类中包含Coordinate点这个类,想要实例化一个固定的线段就可以使用const修饰Coordinate这个类。实例如下

class Coordinate
{
public:
    Coordinate(int x, int y);
    
private:
    int m_x;
    int m_y;
};

Coordinate::Coordinate(int x, int y):
    m_x(x), m_y(y)
{

}

Coordinate表示点的类,其中包含点的xy坐标

class Line
{
public:
    Line(int x1, int y1, int x2, int y2);

private:
    const Coordinate m_coorA;
    const Coordinate m_coorB;
};

Line::Line(int x1, int y1, int x2, int y2):
    m_coorA(x1, y1), m_coorB(x2, y2)
{
        
}

Line表示线的类,包含两个点的类,即包含AB两个坐标点

int main(void)
{
    Line *p = new Line(1, 2, 4, 5);
    
    delete p;
    p = NUll;
    return 0;
}

注意:const修饰的变量/函数/对象都必须使用初始化列表来初始

常成员函数

常成员函数:成员函数采用const修饰

以Coordinate点这个类为例,包含const修饰的changeXY函数和未被修饰的changeXY函数,这两函数互为函数的重载。

class Coordinate
{
public:
    Coordinate(int x, int y);
    void printfInfo() const;
    void printfInfo();
private:
    int m_x;
    int m_y;
};

Coordinate::Coordinate(int x, int y):
    m_x(x), m_y(y)
{

}

常成员函数中不能修改成员变量值。即下面的写法是错误的

void Coordinate::printfInfo() const
{
    m_x = 5;
    m_y = 8;
    cout << "const" << "(" << m_x << ", " << m_y << ")" << endl;
}

其函数原型为

void Coordinate::printfInfo(const Coordinate *this)
{
    this->m_x = 5;
    this->m_y = 8;
    cout << "const" << "(" << this->m_x << ", " << this->m_y << ")" << endl;
}

而此时this指针为常指针,不能修改其值,因此这种使用方法是错误的。

包含const修饰的changeXY函数和未被修饰的changeXY函数互为函数的重载,那什么时候调用的是那个呢?如下使用方式调用的是未被const修饰的函数

int main(void)
{
    Coordinate coorA(4, 5);
    coorA.printfInfo();
    
    return 0;
}

那什么时候可以调用常成员函数呢?如下使用方式调用的是const修饰的函数也就是常成员函数

int main(void)
{
    const Coordinate coorA(4, 5);
    coorA.printfInfo();
    
    return 0;
}

调用常成员函数并不只上面的一种方法,当没有函数重载时,定义了有常成员函数,也可以调用常成员函数实例如下:

class Coordinate
{
public:
    Coordinate(int x, int y);
    void printfInfo(void) const;

private:
    int m_x;
    int m_y;
};

Coordinate::Coordinate(int x, int y)
    : m_x(x), m_y(y)
{

}

void Coordinate::printfInfo(void) const
{
    cout << "const" << "(" << m_x << ", " << m_y << ")" << endl;
}

int main()
{
    Coordinate CoorA(4, 5);
    CoorA.printfInfo();

    return 0;
}

其输出为:

const(4, 5)

由上例知普通对象在没有相应的普通对象函数情况下会调用常对象函数,但是常对象只能调用常对象函数,要不然编译器会报错

相关文章

  • [C++之旅] 17 常对象成员和常成员函数

    [C++之旅] 17 常对象成员和常成员函数 一、常对象成员和常成员函数 常对象成员 常对象成员:对象成员采用co...

  • C++常对象-常函数-常成员变量

    C++常对象-常函数-常成员变量 C++常对象 C++常对象, 就是使用const修饰的类实例!const A a...

  • 14.0 C++远征:常对象成员和常成员函数

    5-1常对象成员和常成员函数 1.常对象成员 用const修饰对象成员,对象成员就变成了常对象成员。 2.常成员函...

  • 常对象、常成员函数、常数据成员

    常对象 在定义时必须初始化,且不能更新 常成员函数 如:int GetYear() const{return ye...

  • 第三章 类与对象应用

    学习目的 掌握静态数据成员及静态成员函数的使用; 掌握友元函数的使用; 掌握常成员函数的应用; 掌握对象成员的使用...

  • 类 常函数(末尾 const)

    常函数即在类的成员函数参数列表后放置const的函数.常函数的作用是限制函数体对成员变量的修改,此外,常函数也不能...

  • C++ 对象内存布局

    可能会对 C++ 对象的内存布局产生影响的因素: 对象的数据成员变量 对象的一般成员函数 对象的虚成员函数 对象继...

  • [初学C++]静态成员

    静态成员变量和成员函数 在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所...

  • C++ const常量对象、常量成员函数和常引用

    01 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字 02 常量成员函数 ...

  • C++ const用法

    一 修饰类 C++中const修饰类主要包括3个部分:数据成员,成员函数,对象。 数据成员const 修饰类的成员...

网友评论

      本文标题:[C++之旅] 17 常对象成员和常成员函数

      本文链接:https://www.haomeiwen.com/subject/wdigqqtx.html