1. CPP的类与对象:

当我们定义一个基本类型变量时,方法如下:

int p;        #定义一个int类型变量
bool b;      #定义一个bool类型变量
float c ;      #定义一个float类型变量

显然定义变量p适用于存储整数类型的,变量b是用于存储布尔类型的,变量c是用于存储浮点数类型的。但是变量声明的意义不只是这个,另一个同样重要的意义就是限定对变量的操作。例如:对p可以进行算术运算,比较运算等,对b可以进行逻辑运算等。这就说明每一种数据类型都包括了数据本身的属性以及对数据的操作。

  但实际上C++定义的基本类型并不能满足现实世界中各种对象的需要,于是C++提供了对自定义类型的支持,这就是类。类实际上就是用户自定义的一种数据类型,通过对现实世界的对象进行数据抽象和功能抽象,得到类的数据成员和函数成员。当定义了一个类之后,便可以定义该类型的变量,这个变量就称为累的对象(或实例),这个定义的过程也称为类的实例化。

类的函数:

构造函数:是类的一种特殊的成员函数,它会在每次类被创建时被调用。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。在程序运行中,当遇到对象声明语句时,程序会向操作系统申请一定的内存空间用于存放新建的对象。构造函数的作用就是在对象被创建的过程中利用特定的值初始化这个对象。

默认构造函数:未提供显式初始值时,用来初始化对象的构造函数。

拷贝构造函数/复制构造函数:拷贝构造函数是一类特殊的构造函数,是使用同一类中之前创建的对象来初始化新创建的对象。

通常用于:

  1. 当用类的一个对象去初始化该类的另一个对象时;
  2. 如果函数的形参是类的对象,调用函数时,进行形参和实参的结合是。
  3. 如果函数的返回时类的对象,函数执行完成返回调用者时。

析构函数:它用来完成对象被删除前的一些清理工作。析构函数实在对象的生存期即将结束的时刻被自动调用的。

示例代码:

#include<iostream>
using namespace std;//Point类的定义
class Point {
public:   Point(){   cout <<"调用默认构造函数"<<endl;   }                               //默认构造函数     Point(float xx,float yy) {x = xx;y = yy;}                                //构造函数    Point(Point &p){   x = p.x;    y = p.y;    cout << "调用拷贝构造函数"<<endl;    }                                //拷贝构造函数int getX() { return x; }        int getY() { return y; }
private:                             //私有数据成员float x, y;
};

第一种情况示例:

int main() {Point a(1, 2);Point b(a);                //用对象a初始化实例b,复制构造函数被调用Point c = a;               //用对象a初始化实例c,复制构造函数被调用cout << b.getX() << endl;cout << c.getX() << endl;return 0;
}

运行结果:

第二种情况示例:

void f(Point p) {cout << p.getX() << endl;
}
int main() {Point a(1, 2);f(a);                          //函数的形参为类的对象,当函数调用时,可以理解为用对象a初始化函数形参p,构造函数被调用。return 0;
}

运行结果:

第三种情况示例:

//定义一个返回值类型为Point类型的函数
Point g() {Point a(1, 2);return a;
}
int main() {Point b;      b = g();cout << b.getX() << endl;return 0;
}

运行结果:

转载于:https://www.cnblogs.com/wobu/p/8884817.html

c++类与对象(1)——构造,复制构造函数相关推荐

  1. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  2. 类和对象(中)——构造函数介绍

    目录 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类. 空类中并不是什么都没有,任何类在什么都不写时,编译器 ...

  3. java 克隆对象工具类_关于dorado-core源码包中CloneUtils克隆工具类对对象进行克隆复制操作...

    一.前言 基于dorado.core.jar开源包中的com.bstek.dorado.util.CloneUtils克隆工具类,对对象进行通过java.lang.reflect.Method映射克隆 ...

  4. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  5. 复制构造函数(拷贝构造函数)

    也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生.对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什 ...

  6. C++学习总结(函数、类与对象)

    前言:时间过的好快,转眼一学期就过去了,期末考试也快到了,所以就复习一遍同时也将自己学习的感悟总结下来.前面几章大多与C语言相似,就不总结了. 第三章--函数 参数传递 #include <io ...

  7. 编译器角度看C++复制构造函数

    [C++对象模型]复制构造函数的建构操作 关于复制构造函数的简单介绍,可以看我以前写过的一篇文章C++复制控制之复制构造函数该文章中介绍了复制构造函数的定义.调用时机.也对编译器合成的复制构造函数行为 ...

  8. frontcon函数用不了_C++复制构造函数与析构函数

    想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C++语言程序设计课程一起过一遍C++的语法知识吧! 当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候 ...

  9. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第三章:类和对象进阶(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter 3:类和对象进阶 $3.1构造函数 $3.1.1 构造函数的概念和作用     全局变量在程序装入内存时就已经分配好了存储空间,程序 ...

  10. C++语言程序设计——知识点复盘(第四章 类与对象)

    目录 面向对象程序设计的基本特点 1.抽象 2.封装 3.继承 4.多态 类和对象 类的成员函数 1.成员函数的实现 2.目的对象. 3.带默认形参值的成员函数 4.内联成员函数 构造函数 析构函数 ...

最新文章

  1. ios签名软件_如何给无法上架App Store的App做ios签名?
  2. 六、MyBatis教程之六注解使用详解
  3. 读取并修改App.config文件(转载)
  4. python入门到实践-看完Python从入门到实践后该看什么书?
  5. keil mdk5安装
  6. 字节跳动P0级事故:实习生删除GB以下所有模型,直接上了今日头条......
  7. python 分词工具训练_中文分词入门和分词工具汇总攻略
  8. 学术联赛 | 运用知识图谱技术,赋能多领域应用 ——“未来杯”AI学术联赛总决赛暨颁奖典礼圆满落幕...
  9. 最详细的YOLOv3论文笔记
  10. android 移除泛型中元素_Android 代码混淆 混淆方案
  11. Java 实战篇-JDK9新特性
  12. PLC程序的组成结构
  13. 计算机内码汉字,gbk内码(汉字机内码在线查询)
  14. Xshell复制粘贴快捷键设置
  15. 利用MATLAB解特征方程,并画出特征根的分布,便于分析系统的稳定性
  16. 计算机网络按覆盖地域分为,计算机网络按其所覆盖的地域范围一般可分为________ 。...
  17. 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...
  18. html5网页制作技巧,HTML5 网页制作技巧
  19. PS基础--水平翻转图像
  20. 阿里云服务器更换Ubuntu操作系统并配置图形界面

热门文章

  1. Java依旧排名第一,然而变化几何?
  2. 周鸿祎:通过免费吸引用户不是万能 还需回归商业本质
  3. STL - queue(队列)
  4. 一个程序通过窗体句柄控制另一个窗体
  5. 第3章 排列清单控制标记
  6. vue-cli3 按需加载loading,服务的方式调用
  7. stooge sort
  8. Samba服务的安装
  9. credential for git
  10. 【Spring cloud 系列】:构建Eureka Server (02)