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(, );
Point b(a); //用对象a初始化实例b,复制构造函数被调用
Point c = a; //用对象a初始化实例c,复制构造函数被调用
cout << b.getX() << endl;
cout << c.getX() << endl;
return ;
}

运行结果:

第二种情况示例:

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

运行结果:

第三种情况示例:

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

运行结果:

c++类与对象(1)——构造,复制构造函数的更多相关文章

  1. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  2. C++(二十六) — 构造函数、析构函数、对象数组、复制构造函数

    1.构造函数 (1)每个类都要定义它自己的构造函数和析构函数,是类的成员函数. 特点:名称与类名相同:没有返回值:一定是共有函数,可以直接访问类内所有成员函数:可以带默认形参,可以重载: class ...

  3. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  4. C++ 类 复制构造函数 The Copy Constructor

    一.复制构造函数的定义 复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性.复制构造函数创建一个新的对象,作为另一个对象的拷贝.复制构造函数只含有一个形参,而且其形参为本类对象的引用.复制构 ...

  5. 剑指offer:赋值运算符函数和复制构造函数

    赋值运算符函数 对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函 ...

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

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

  7. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  8. C++中复制构造函数与重载赋值操作符

    我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类:   class CTe ...

  9. c++ 复制构造函数和赋值函数

    c++ 自动提供了下面这些成员函数 1默认构造函数 2.复制构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 赋值构造函数copy construtor 用于将一个对象复制到新创建的对象中, ...

  10. C/C++基础知识总结——类与对象

    1. 面向对象程序设计的特点 1.1 抽象 1.2 封装 1.3 继承 1.4 多态 (1) 分为:强制多态.重载多态.类型参数化多态.包含多态 (2) 强制多态:类型转换 重载多态: 类型参数化多态 ...

随机推荐

  1. 测试驱动开发实践3————testSave之新增用户

    内容指引 1.确定新增用户的业务规则 2.根据业务规则设计测试用例 3.为测试用例赋值并驱动开发 一.确定新增用户的规则 1.注册用户允许通过"用户名+密码"."手机号+ ...

  2. 记录一个古老的Sql分页过程

    /* 根据单位ID获取排班信息 For:WXX TIme:2017-11-22 */ ALTER proc [dbo].[proc_ScheduleInfo] )='', --单位ID )='', - ...

  3. 事后诸葛亮——城市安全风险管理项目Postmortem结果

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 本系统希望实现快速识别危害因素,使工作人员对风险作出准确的评估.即让使用者熟悉潜在的危险因素,知道 ...

  4. Ubuntu登陆密码忘记

    在VMware中安装了Ubuntu 10.04,经过了一段时间,再次登录的时候居然进不去了, 一开始不知道怎样在虚拟机中进入到Grub启动界面,网上搜索了一番,按照以下步骤重新为用户设定了新密码. 重 ...

  5. EL表达式 与 servlvet3.0的新规范

    EL表达式 EL表达式 是一种简化的数据访问方式,是对jsp脚本的简化  . 如我们在一个页面中需要输出session的保存的一个值: <%  out.println(session.getAt ...

  6. Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理

    1 VMware的安装和使用 注意有 快照 和 克隆 的功能. 快照相当于建立一个 系统还原点, 可以随时恢复到原来状态. 克隆功能可以复制一个和当前一样的系统,并可以选择链接安装,只使用很少的空间就 ...

  7. B+树介绍

    B+树 B+树和二叉树.平衡二叉树一样,都是经典的数据结构.B+树由B树和索引顺序访问方法(ISAM,是不是很熟悉?对,这也是MyISAM引擎最初参考的数据结构)演化而来,但是在实际使用过程中几乎已经 ...

  8. WPF treeview扩展

    记录一下工作中遇到的问题,以便以后忘记了可以来看. 在工作中遇到一个问题,就是要实现类型如下的界面,没有使用Telerik和Dev库.本来最开始是想使用Datagrid,但不知道怎么实现treevie ...

  9. c# aynsc 和 await

      static void Main(string[] args) { Print(); Console.WriteLine("这是主线程"); } public static a ...

  10. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...