C++学习体会--引用方式复制类对象

C++学习体会--引用方式复制类对象

引用的重要性实际体现在函数的形参和函数的返回值。一般引用也只是出现在这两个地方。

引用方式的好处,如果是体现在形参,在使用函数的时候,实参必定会初始化形参,如果不加引用,系统会创建实参的副本将值传递给形参,这样会造成资源额外的占用。为了节省资源的占用,通过一种引用的方式,达到这个效果,因为引用知识将实参的地址给了形参,处理形参,如同处理实参。

下面将给出程序使用的例子:引用的重要性体现在形参上

#include <iostream>
using namespace std;

class CBox
{
private:
    double m_Length;
    double m_Width;
    double m_Height;

public:

    CBox(double lv, double wv, double hv) : m_Length{ lv }, m_Width{ wv }, m_Height{ hv }
    {
        cout << "Constrcurtor called." << endl;
    }

    CBox(const CBox &initB) :CBox{ initB.m_Length, initB.m_Width, initB.m_Height }{

        cout << " refrence  called" << endl;
    }

    double volume()
    {
        return m_Length*m_Height*m_Width;
    }

};

int _tmain(int argc, _TCHAR* argv[])
{
    CBox box1( 10.0, 10.0, 10.0 );
    CBox mybox(box1);// mybox{box1};相同

    cout << "Volume of box1=" << box1.volume() << endl;
    cout << "Volume of mybox=" << mybox.volume() << endl;

    return 0;
}

结果:

分析:

    CBox box1( 10.0, 10.0, 10.0 );
    CBox mybox(box1);1.这两句的类定义,会自动调用构造函数,在类声明中可以看到每次调用构造函数时,会显示Constrcurtor called .2.因为定义mybox()以box1作为实参,不是为box1创建副本,而是通过引用的方式传递给形参,成功通过引用的方式时,将会出现refrence called

原文地址:https://www.cnblogs.com/pans0ul/p/9465451.html

时间: 2024-09-28 18:16:32

C++学习体会--引用方式复制类对象的相关文章

Java File类学习笔记2:File类对象及常用操作方法

一. 文件.相对路径与绝对路径 1.文件 (1)标准文件:就像图片,音乐文件等. (2)目录文件:也就是平常所说的文件夹. (3)虚拟内存文件:系统在运行程序时生成的临时性文件. 2.文件的路径 (1)相对路径:相对于某一文件的路径,形象地说是把两文件的绝对路径相同的部分砍掉,剩下的就是相对路径 如: A文件是"D:\MyDocuments\StudySample\src\cn\xmh", B文件是"D:\MyDocuments\StudySample\src\netjava

java学习笔记(三)类,对象,包

在面向对象编程中,程序不是围绕着要解决的任务来设计,而是围绕着要解决的问题的对象来设计. 类:是具有相同属性和行为的一组对象的集合,类中要包含这个类的属性和方法,但并不是所有的类都必须包含属性和方法. 例:编写一个学生类,学生拥有学号,姓名,年龄,性别等. /** *学生类 */ public class Student{ /* 属性 */ public int stuNo; public String name; public int age; public String sex; /* 方法

学习java中对《类与对象》的认知

在学习<类与对象>章节中,我们知道了面向对象的编程语言中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合, 在 Java 程序中,自定义类的一般格式为: class 类名 { 数据成员1 数据成员2 数据成员3 …… 成员方法1 成员方法2 } 类的说明部分由关键字 class 与类名组成,注意的是类名的命名遵循 Java 标识符的定义规则.类体是类声明中花括号所包括的全部内容,它又是由成员变量(属性)和成员方法(方法)两部分组成. 说了类,接着就是对象的剖知了,对象是把客观世界

C++实现根据类名动态生成类对象

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新. 之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher. 在需要使用数据的时候,通过: FetcherFactory::getFetcher<XXXFetcher>() 即可获取一

C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream>  using namespace std;    class Test  {  public:      Test(int temp)      {          p1=temp;      }  prote

JavaSE学习笔记(五)——类与对象

一.  类和对象 1.1           面向对象与面向过程的区别 1.面向过程 采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,耦合度高,当任何一步骤出现问题,将会影响到所有的系统.如:采用面向过程生产电脑,那么他不会分CPU.主板和硬盘,它会按照电脑的工作流程一次成型. 2.面向对象 面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

《Java开发手册》学习进程之第6章对象和类

传统的过程化程序设计通过设计一系列的过程——算法来求解问题.这些过程一旦被确定,下一步就要开始寻找存储数据的方式,即“程序 = 算法 + 数据结构”.而面向对象的程序设计(即OOP,Object Oriented Programming)调换了这个次序,将数据放在第一位,之后再考虑操纵数据的算法. 在OOP中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例.所有类构成了一个通过继承关系相联系的层次结构. 由于面向过程的编程模式是先将一系列过程(即函数)设计好再通过参数输入求解的,所以对

字符串类的定义和字符串类对象的创建方式

String为字符串类. 其定义如下: public final class String 可以看出,String类是final类型的,是不可继承的.从源代码还可以看出,String从本质上说就是一个char类型的数组. 字符串类对象的声明有两种方式. 第一种,使用new关键字创建. String 变量名=new String("值"); 第二种,直接声明并初始化. String 变量名="值"; 我更喜欢第一种,标准的,所有类的对象的声明都通过  new 类的构造