博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于拷贝构造函数
阅读量:4217 次
发布时间:2019-05-26

本文共 2261 字,大约阅读时间需要 7 分钟。

#include 
#include
using namespace std;class numbered{public: numbered(); numbered(string no) :mysn_(no){}; string mysn_;};numbered::numbered() { string s; s += to_string(rand()); mysn_ = s;}voidf(numbered s){ cout << s.mysn_ << endl;}intmain() { numbered a, b = a , c = b ; cout << "a.mysn_: " << a.mysn_ << endl; cout << "b.mysn_: " << b.mysn_ << endl; cout << "c.mysn_: " << c.mysn_ << endl; cout << "invoke f() for a" << endl; f(a); cout << "invoke f() for b" << endl; f(b); cout << "invoke f() for c" << endl; f(c); return 0;}

输出

a.mysn_: 1804289383

a.mysn_: 1804289383
a.mysn_: 1804289383
invoke f() for a
1804289383
invoke f() for b
1804289383
invoke f() for c
1804289383

 

修改代码

#include 
#include
using namespace std;class numbered{public: numbered(); numbered(string no) :mysn_(no){}; numbered(numbered ¶); string mysn_;};numbered::numbered() { string s; s += to_string(rand()); mysn_ = s;}numbered::numbered(numbered ¶) { cout << "copy constructor invoked." << endl; string s; s += to_string(rand()); mysn_ = s;}voidf(numbered s){ cout << s.mysn_ << endl;}intmain() { numbered a, b = a , c = b ; cout << "a.mysn_: " << a.mysn_ << endl; cout << "b.mysn_: " << b.mysn_ << endl; cout << "c.mysn_: " << c.mysn_ << endl; cout << "invoke f() for a" << endl; f(a); cout << "invoke f() for b" << endl; f(b); cout << "invoke f() for c" << endl; f(c); return 0;}

即增加

numbered(numbered ¶);numbered::numbered(numbered ¶) {    cout << "copy constructor invoked." << endl;    string s;    s += to_string(rand());    mysn_ = s;}

输出

copy constructor invoked.

copy constructor invoked.
a.mysn_: 1804289383
b.mysn_: 846930886
c.mysn_: 1681692777
invoke f() for a
copy constructor invoked.
1714636915
invoke f() for b
copy constructor invoked.
1957747793
invoke f() for c
copy constructor invoked.
424238335
 

继续修改代码

f(numbered s){    cout << s.mysn_ << endl;}

改为

f(numbered &s){    cout << s.mysn_ << endl;}

输出

copy constructor invoked.

copy constructor invoked.
a.mysn_: 1804289383
b.mysn_: 846930886
c.mysn_: 1681692777
invoke f() for a
1804289383
invoke f() for b
846930886
invoke f() for c
1681692777
 

转载地址:http://iqvmi.baihongyu.com/

你可能感兴趣的文章
Java新手的通病[4]:异常处理使用不当
查看>>
java编程中的常见异常
查看>>
java读写文件大全
查看>>
Java垃圾回收器的工作机制
查看>>
SQL优化34条 java面试题
查看>>
java sql常见面试题
查看>>
Java同步、异步相关知识点
查看>>
java线程总结
查看>>
Java性能优化[1]:基本类型 vs 引用类型
查看>>
Java 短路运算符和非短路运算符
查看>>
XML的两种解析方式Dom和SAX的区别
查看>>
使用 SAX 处理 XML 文档
查看>>
session与cookie的区别
查看>>
java中数据类型转换
查看>>
Java运算符、 &&与&、||与|区别
查看>>
Java 算术运算符
查看>>
Spring 模板方法 vs 经典模板方法设计模式
查看>>
白话解说Spring 容器设计理念
查看>>
需求分析心得
查看>>
java笔试题以及答案详解 一
查看>>