C++学习基础六——复制构造函数和赋值操作符
#include <iostream>
#include <string>
using namespace std;
class Sales_item
{
public:
Sales_item()
{
this->number = ;
this->acount = 0.0;
} Sales_item(const string &isbnstr)
{
this->isbn = isbnstr;
this->number = ;
this->acount = 0.0;
} //复制构造函数:如果自己不写,C++会默认提供一个
//复制构造函数:只接收一个参数 ,参数的类型是当前类,并且是一个const的引用
//作用:是将形参的数据成员一一赋给当前的数据成员
Sales_item(const Sales_item& other)
{
isbn = other.isbn;
number = other.number;
acount = other.acount;
cout<<"复制构造函数被调用...."<<endl;
} //赋值操作符:如果自己不写,C++会默认提供一个
//返回值是本类的引用,接收一个参数,参数的类型是当前类,并且是一个const的引用
Sales_item& operator= (const Sales_item &other)
{
isbn = other.isbn;
number = other.number;
acount = other.acount;
cout<<"赋值操作符 被调用...."<<endl;
return *this;
} //一般情况下,C++会帮我们实现 复制构造函数和赋值操作符
//但是当一个类的数据成员有指针的时候,我们必须自己实现复制构造函数和赋值操作符
private:
string isbn;
int number;
double acount;
};
(2)主方法:
int main()
{
Sales_item a;
Sales_item b("0-12-djf-X");
Sales_item c(b); //调用复制构造函数
a = b; //调用赋值操作符
return ;
}
class NoName
{
public :
NoName()
{
sPtr = new string;
number = ;
}
~NoName()
{
delete sPtr;
}
//复制构造函数
NoName(const NoName& str)
{
sPtr = new string;
*sPtr = *(str.sPtr);//注意:进行的是指针所指向值的赋值,而不是指针的重新赋值
number = str.number;
} //赋值操作符
NoName& operator=(const NoName &rig)
{
sPtr = new string;
*sPtr = *(rig.sPtr);//注意:进行的是指针所指向值的赋值,而不是指针的重新赋值
number = rig.number;
return *this;
}
private:
string *sPtr;
int number;
};
6.总结复制构造函数和赋值操作符
复制构造函数:是指将构造函数的参数一一给本类的对象的赋值,对于指针而言,不是指针的赋值,而是指针所指向的数据的赋值。
具体代码如下:
class NoName{
private:
string *str;
int i;
double b;
};
NoName(const NoName &other)
{
str = new string;
10 *str = *(other.str);
i = other.i;
b = other.b;
}
赋值操作符: 函数声明
NoName& operator=(const NoName &rig);
NoName& operator=(const NoName &rig)
{//内容跟复制构造函数的一样
str = new string;
*str = *(rig.str);
i = rig.i;
b = rig.b; return *this;
}
C++学习基础六——复制构造函数和赋值操作符的更多相关文章
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...
- C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过: ...
- C++中复制构造函数和赋值操作符
先看一个例子: 定义了一个类:
- [C++]复制构造函数、赋值操作符与隐式类类型转换
问题:现有类A定义如下: class A{public: A(int a) //构造函数 { ...
- C++复制构造函数和赋值符的区别
From http://blog.csdn.net/randyjiawenjie/article/details/6666937 非常感谢原作者分享. class CTest{public: CTe ...
- c++ 复制构造函数和赋值函数
c++ 自动提供了下面这些成员函数 1默认构造函数 2.复制构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 赋值构造函数copy construtor 用于将一个对象复制到新创建的对象中, ...
- [c++基础]3/5原则--拷贝构造函数+拷贝赋值操作符
/* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> #include &qu ...
- 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)
注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...
- C++复制控制:赋值操作符和析构函数
一.赋值操作符 类定义了该类型对象赋值时会发生什么.与拷贝构造函数一样,如果类没有定义自己的赋值操作符,编译器会合成一个. 1.重载操作符的简单介绍 重载操作符是一些函数,其名字为operator后跟 ...
随机推荐
- sql整型字段模糊查询
select count(*) cnt from vhuiy where CAST(id as text) like'%12%'--id为int类型 更详细的链接:http://www.studyof ...
- segues的类型
Name Interface Builder symbol Description Show Present the content in the detail or master area depe ...
- POJ 2155 2维线段树 || 2维BIT
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...
- 关于Let和var声明变量的区别
Let是ES6中添加进来的一个关键字,用于声明变量,其法与var声明变量相同,不同点在于其作用域(块级). 举例可以看出其具体差别 for(var i=0;i<5;i++){ console.l ...
- SCC(强连通分量)
1.定义: 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(SC---strongly connected). 有向图中的极大强连通子图,成为强连通分量(SCC---strongly ...
- 最短JS判断是否为IE6(IE的写法)
常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测.代码如下: var isIE=!!window.ActiveXObject; var ...
- GT 940M 到底怎么样! 768的可以 1080的不要用了
而对于目前的市场来看,NVIDIA独显无疑是占据了产品端的绝对主力,9系列独显也已经全面上市,但除了大家熟悉的GTX级之外,入门级的更新也同样对入门级玩家有着至关重要的意义,其中最具代表性的莫过于今天 ...
- 《Android深度探索》(卷1)HAL与驱动开发读后感
第1章:安卓系统移植与驱动开发概述 这一章主要概括的介绍了安卓驱动开发和系统移植的主要内容,对安卓与Linux驱动做了一个总体的介绍.通过对第一章的学习,使我对Linux驱动开发有了一个感性的认识.在 ...
- python 元组操作
关于元组的常用操作,请参考:http://www.runoob.com/python/python-tuples.html 元组的元素不可修改 ,元组的元素的元素可修改 count(self,valu ...
- jquery 中的几个函数方法
1.$.map(data,function(item,index){return XXX})处理每一个元素的函数.第一个参数是数组元素,第二个参数是该元素的索引值. 遍历data数组中的每个元素,并按 ...