常量对象函数引用和参数传递

定义对象时在前面加上const关键字,则对象的值不会改变。

类的成员函数说明后加const关键字,则该成员函数为常量成员函数。常量成员函数不应该修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。

常量成员函数的重载

两个成员函数,名字和参数表都一样,但是一个是const,一个不是,算重载。

常引用:不同通过常引用修改其所指对象的值。

对象作为函数的参数时,生成该参数需要调用复制构造函数,效率比较低。可以用对象的引用作为参数。

参数传递:形参的初始化和变量的初始化一样:如果形参具有非引用类型,则复制实参的值;如果为引用类型,则它只是实参的别名。

相应代码如下:

#include <iostream>

using namespace std;

class Ctest
{
private :
    int n;
public :
    int m;
    Ctest(int a):m(a),n(1){}
    void Getvalue() const
    {
        cout << n << endl;
    }
    void Getvalue()
    {
        cout << 2 * n << endl;
    }
};

int main()
{
    const Ctest c1(2);
    Ctest c2(5);
    c1.Getvalue();
    c2.Getvalue();
    return 0;
}
时间: 2024-10-22 09:43:33

常量对象函数引用和参数传递的相关文章

c++ 常量成员函数

结合个人的读书理解,做下常量成员函数的笔记. 常量成员函数的形式很简单,就是函数的声明定义后跟上一个const,如 class Test { public: int getData() const; private: int data; }; int Test::getData() const { return data; } int getData() const;就是一个常量成员函数了. 为什么加上一个const就把成员函数变为常量成员函数呢?const关键字到底做了什么? 按照<c++ p

Java:函数引用

你可以Lambda表达式去创建匿名的方法.但很多时候,这份方法可能是已经存在的,这时你可以使用函数引用.这样能够使代码结构更清晰. 我们知道,贪心算法里面,一个常见的步骤是排序.假设有下面的背包类: class Package{ private int weight; // ignore setter and getter } 我们有个背包数组 Package[] packages,如果要对其排序: Arrays.sort(packages, new Comparator<Package>()

php函数间的参数传递(值传递/引用传递)

php:函数间的参数传递 1.值传递 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> ------------------

常量对象与常量成员函数

常量对象与常量成员函数来防止修改对象,实现最低权限原则. 可以用关键字const来指定对象是不可修改的,任何修改该对象的企图,都会导致编译错误. 例如:const Time noon(12,0,0);    声明一个Time 类的常量对象noon,并将它初始化为中午12点. C++不允许在常量对象上调用成员函数,除非成员函数本身也被声明为常量.甚至对不会修改对象的成员函数,也是如此,此外,编译器不允许声明常量的成员函数修改对象. 对一般情况下,通常修改对象的构造函数和析构函数而言,它们不允许被声

《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数

// 构造函数赋值 CTyre(int r, int w):radius(r), width(w) { } 初始化列表 #include<iostream> using namespace std; /*成员对象和封闭类 成员对象: 一个类的成员变量是另一个类的对象 包含 成员对象 的类叫 封闭类 (Enclosing) */ class CTyre { private: int radius; int width; public: CTyre(int r, int w) :radius(r)

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):

函数可以返回一个局部对象,而不能返回一个局部对象的引用(指针):当函数返回一个局部对象时,虽然这个对象已经释放,但是返回时会产生一个临时的对象.而当返回一个局部对象的引用时,这个对象已经不存在了.这就要求在函数参数中,包含一个引用或指针.int &func(int a,int b,int &retsult){ retsult = a + b; return &retsult}但是如下代码是错误的(返回局部对象的引用)int &func(int a,int b){ int &

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

c++返回函数局部对象的引用

    函数千万不要返回局部对象的引用或指针 局部变量在函数里面,当函数执行结束后将释放局部变量,如果返回引用或批针这个时候引用或指针指向所指向的内存空间已经释放.指针和引用将是垂悬指针.很危险! 但是如果返回的"局部变量"是堆中的内存值就可以返回了 C++函数为什么要使用引用? C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体).所以在C++之中使用引用作为函数参数和返回值的目的和使用指针是一样的.而且形式上更加直观,所以C++提

&lt;C++&gt; 类(3):初始化列表 常函数和常量对象 虚函数与多态(包括纯虚函数)

一.初始化列表(初始化列表中必须有的两个内容) 1.类中const的成员变量: ①特点:不能修改 必须初始化 在构造函数后面加冒号 格式为:":变量名(值)" 也就是说 常量必须在初始化列表中初始化 ②执行顺序:构造函数先执行初始化列表 然后执行函数中的内容 1 #include<iostream> 2 using namespace std; 3 4 class CPerson 5 { 6 public: 7 const int a; 8 public: 9 CPerso