注:若类中没有显示的写如下函数,编译会自动生成:默认复制构造函数、默认赋值构造函数(浅拷贝)、默认=运算符重载函数(浅拷贝)、析构函数;

1、默认构造函数(默认值)构造函数的作用:初始化对象的数据成员。

2、复制构造函数  作用:用已存在的对象初始化新建的对象的数据成员。

类对象作为形参,如果参数是引用传递则不会调用任何复制构造函数;如果是按值传递,则会调用复制构造函数

3、=运算符重载

两个对象已存在;

4、深拷贝

为类的指针成员变量重新分配内存;

5、浅拷贝(编译器默认生成的复制构造函数为浅拷贝函数)

6、析构函数

用于完成对象删除前的清理工作。  

#include "stdafx.h"
#include "string"
#include <iostream> using namespace std;
class Person
{
public:
int nAge; //年龄
double dbHeight; //身高
//char *name; //姓名
public:
//1、默认构造函数(无参)
/*
1、如果创建一个类没有任何构造函数,则系统会自动生成一个默认的无参构造函数,函数体为空;
2、如果存在一个构造函数,系统就不会生成一个默认的构造函数,如果希望有一个无参的构造函数,则需要手动添加。
3、只允许有一个默认构造函数
*/
Person()
{
nAge = ;
dbHeight = ;
//name = new char[100];
}
//2、默认构造函数(浅拷贝函数)(所有参数为默认值的函数也为默认构造函数)
/*Person(int nAge = 16, double dbHeight = 175)
{
this->nAge = nAge;
this->dbHeight = dbHeight;
}*/
//3、复制构造函数(也称为拷贝构造函数)(等号右边类对象的值已被创建)
/*
1、复制构造函数参数为类对象本身的引用,根据已存在的对象复制出一个新的该类的对象,通常在函数中将已存在对象的数据成员的值复制一份到新创建的对象中;
2、类中若没有显示的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员时,由系统创建的该默认构造函数会有风险(深拷贝和浅拷贝);
*/
//4、=运算符重载(等号左右两边类对象的值都已被创建)
/*
1、将等号右边类对象的值,复制给等号左边类对象;
*/
Person &operator=(const Person &p)
{
//检查左右两边是否是否为同一对象,相同则直接返回
if (this == &p)
{
return *this;
}
//复制等号右边的成员到左边的对象中
this->nAge = p.nAge;
this->dbHeight = p.dbHeight; return *this;
} Person(const Person & p)
{
nAge = p.nAge;
dbHeight = p.dbHeight;
}
void showAge(Person p) //按值传递
{
cout <<"年龄:"<<p.nAge<<endl;
}
void showHeight(Person &p) //按引用传递
{
cout <<"身高:"<<p.dbHeight<<endl;
}
void showAgeHeight(Person *p) //按指针传递
{
cout <<"年龄:"<<p->nAge<<endl;
cout <<"身高:"<<p->dbHeight<<endl;
}
//析构函数
/*~Person()
{
delete name;
}*/
}; int _tmain(int argc, _TCHAR* argv[])
{
Person p1,p2; //调用无参构造函数
//Person p3 =p2; //调用复制构造函数
//p1.showAge(p1); //调用复制构造函数(不会调用无参构造函数)
//p1.showHeight(p1); //引用传递不会调用复制构造函数
//p1 = p2; //调用=运算符重载函数
//p1.showAgeHeight(&p1); //指针传递不会调用复制构造函数
return ;
}
 

C++构造函数(复制构造函数)、析构函数的更多相关文章

  1. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)

    注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...

  2. C++ 复制控制之复制构造函数

    7月26日更新: 过了这么长的时间回过头来看,发现文章中有几个点说错(用红字标出): 构造函数不是只有唯一一个参数,它也可以是多参数形式,其第二参数及后继以一个默认值供应. 不是没有声明复制控制函数时 ...

  3. C++学习基础六——复制构造函数和赋值操作符

    1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...

  4. C++中复制构造函数

    复制构造函数 复制构造函数用于: 根据另一个同类型的对象显示或隐式初始化一个对象 复制一个对象,将它作为实参传给一个函数 从函数返回时复制一个对象 初始化顺序容器中的元素 根据元素初始化式列表初始化数 ...

  5. c++类与对象(1)——构造,复制构造函数

    CPP的类与对象: 当我们定义一个基本类型变量时,方法如下: int p; #定义一个int类型变量 bool b; #定义一个bool类型变量 float c ; #定义一个float类型变量 显然 ...

  6. 何时调用C++复制构造函数和拷贝构造函数(转)

    1. 何时调用复制构造函数 复制构造函数用于将一个对象复制到新创建的对象中.也就是说,它用于初始化过程中,而不是常规的赋值过程中.类的复制构造函数原型通常如下: class_name(const cl ...

  7. C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式调用

    一. 构造函数是干什么的   class Counter   {   public:            // 类Counter的构造函数            // 特点:以类名作为函数名,无返回 ...

  8. C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

    一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...

  9. 赋值操作符、复制构造函数、析构函数、static成员练习

    /** * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 * 雇员名字的string构造函数.如果该类需要复制构造函数或赋值操作符,实现这些函数 * ...

随机推荐

  1. SVN进行代码的托管

    svn 使用的是集中服务器 就是只有一个服务器的意思 git 是分布式服务器  服务器: 存储客户端上传的源代码. 可以在Windows上通过安装 Visual SVN Sever .  客户端: 上 ...

  2. UVa 1336 Fixing the Great Wall (区间DP)

    题意:给定 n 个结点,表示要修复的点,然后机器人每秒以 v 的速度移动,初始位置在 x,然后修复结点时不花费时间,但是如果有的结点暂时没修复, 那么每秒它的费用都会增加 d,修复要花费 c,坐标是 ...

  3. CocoaPods(第三方类库管理工具)

    iOS安装CocoaPods详细过程  一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods” ...

  4. bzoj 4446: [Scoi2015]小凸玩密室【树形dp】

    神仙题!参考https://www.cnblogs.com/wfj2048/p/7695711.html 注意完全二叉树不是满二叉树!!!! 设g[u][j]为u遍历完子树到深度为i-1的祖先的兄弟的 ...

  5. 限制属性绑定(__slots__)

    正常情况下,当定义了一个class并创建实例后,可以给该实例绑定任何属性和方法,这就是动态语言的灵活性 属性和方法是可以直接定义在class中的,但动态绑定允许在程序运行的过程中动态给class加上属 ...

  6. Nginx系列篇三:linux中Nginx+keepalived做一个高可用的主从配置

    建议:先阅读搭建Nginx负载均衡之后再看此篇 备注: Nginx+keepalived的高可用有两种方式 一.主从配置 二.双主热备配置[下一篇] 准备: 标配四台服务器 Master:192.16 ...

  7. hdu 3461 Code Lock 并查集(有点难想到)★★

    #include<stdio.h> #include<math.h> ]; int count; #define mod 1000000007 int find(int x) ...

  8. Qt基本应用

    1 使用方式 在qt designer中直接设计图形界面,然后使用pyGUI转换成py文件. 可以发现,转换的文件为一个class.并不是一个完整的程序(运行时无法出现窗口).这个类名字是Ui_Mai ...

  9. IDEA Maven Hadoop调试hdfs程序

    IDEA 远程调试 Hadoop 两大特色:一是采用maven的pom配置:二是直接连接hdfs:9000端口,无须另外在服务端配置参数. 其实内容包含了两种方式:本地与远程调试.这里仅仅只是使用远程 ...

  10. Hdu 3652 B-number (同余数位DP)

    题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.d ...