C++ 复制构造函数和赋值操作符
2015-10-06 18:31
369 查看
复制构造函数的适用情况
1.对象的定义形式 - 复制初始化
2.形参与返回值
3.初始化容器
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Sales_item
{
public:
Sales_item():units_sold(0),revenue(0.0)
{
cout << "默认构造函数被调用" << endl;
}
Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0)
{
cout << "构造函数Sales_item(const std::string &book)被调用" << endl;
}
//复制构造函数
Sales_item(const Sales_item &orig)
:isbn(orig.isbn),
units_sold(orig.units_sold),
revenue(orig.revenue)
{
cout << "复制构造函数被调用" << endl;
}
//赋值操作符
Sales_item& operator=(const Sales_item &rhs)
{
cout << "赋值操作符被调用" << endl;
isbn = rhs.isbn;
units_sold = rhs.units_sold;
revenue = rhs.revenue;
return *this;
}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
Sales_item foo(Sales_item item)
{
cout << endl;
Sales_item temp;
temp = item;
return temp;
}
int main()
{
Sales_item a;
Sales_item b("0-201-78345-X");
Sales_item c(b);
a = b;
Sales_item item = string("9-999-99999-9");
cout << "====================="<<endl;
Sales_item ret;
ret = foo(b);
cout << endl<<"vetor=============" << endl;
vector<Sales_item> svec(5);
cout << endl<<"数组=============" << endl;
Sales_item primer[] = {
string("9-999-99999-1"),
string("9-999-99999-2"),
string("9-999-99999-93"),
Sales_item()
};
return 0;
}
1.对象的定义形式 - 复制初始化
2.形参与返回值
3.初始化容器
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Sales_item
{
public:
Sales_item():units_sold(0),revenue(0.0)
{
cout << "默认构造函数被调用" << endl;
}
Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0)
{
cout << "构造函数Sales_item(const std::string &book)被调用" << endl;
}
//复制构造函数
Sales_item(const Sales_item &orig)
:isbn(orig.isbn),
units_sold(orig.units_sold),
revenue(orig.revenue)
{
cout << "复制构造函数被调用" << endl;
}
//赋值操作符
Sales_item& operator=(const Sales_item &rhs)
{
cout << "赋值操作符被调用" << endl;
isbn = rhs.isbn;
units_sold = rhs.units_sold;
revenue = rhs.revenue;
return *this;
}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
Sales_item foo(Sales_item item)
{
cout << endl;
Sales_item temp;
temp = item;
return temp;
}
int main()
{
Sales_item a;
Sales_item b("0-201-78345-X");
Sales_item c(b);
a = b;
Sales_item item = string("9-999-99999-9");
cout << "====================="<<endl;
Sales_item ret;
ret = foo(b);
cout << endl<<"vetor=============" << endl;
vector<Sales_item> svec(5);
cout << endl<<"数组=============" << endl;
Sales_item primer[] = {
string("9-999-99999-1"),
string("9-999-99999-2"),
string("9-999-99999-93"),
Sales_item()
};
return 0;
}
相关文章推荐
- C++学习笔记之继承
- 黑马程序员——OC语言加强---autorelease基本使用
- STL学习系列之一——标准模板库STL介绍
- 黑马程序员——OC语言加强---@property参数
- 黑马程序员——OC语言加强---内存管理的基本概念及范围
- 位运算符
- 黑马程序员——OC语言基础---id类型及应用场景
- C++中内联函数何时被编译器禁止?
- 黑马程序员——OC语言基础---@synthesize关键字介绍和使用
- C++中,get和getline函数的区别
- 位运算符
- 黑马程序员——OC语言基础---@property关键字介绍及使用
- C++深复制与浅复制(七)
- C/C++中指针所能指向的地址范围
- C/C++ 笔试、面试题目总结,
- 交换两个数的值,不借助第三方变量
- Implementing a simple smart pointer in C++
- c++primer plus第十七章-输入和输出概述
- 黑马程序员——OC语言基础---description方法介绍及重写
- 黑马程序员——OC语言基础---extern和static关键字