zoukankan      html  css  js  c++  java
  • 理解拷贝构造函数

    例一:

     1 #include<iostream>
     2 using namespace std;
     3 class numbered{
     4 private:
     5     static int seq;
     6 public:
     7     numbered(){ mysn = seq++;}
     8     int mysn;        
     9 }; 
    10 int numbered::seq = 0;
    11 
    12 void f(numbered s){
    13     cout<<s.mysn<<“ ”;
    14 }
    15 int main(int argc,char**argv){
    16     numbered a,b=a,c=b;
    17     f(a);  f(b);  f(c); 
    18     return 0 ; 
    19 }
    View Code

    输出 0 0 0 

    例二:

     1 #include<iostream>
     2 using namespace std;
     3 class numbered{
     4 private:
     5     static int seq;
     6 public:
     7     numbered(){ mysn = seq++;}
     8     numbered(numbered &n) { mysn = seq++;}
     9     int mysn;        
    10 }; 
    11 int numbered::seq = 0;
    12 
    13 void f(numbered s){
    14     cout<<s.mysn<<endl;
    15 }
    16 int main(int argc,char**argv){
    17     numbered a,b=a,c=b;
    18     f(a);  f(b);  f(c); 
    19     return 0 ; 
    20 }
    View Code

    输出 3 4 5

    定义变量a时,默认构造函数起作用,序号设定为0,当定义b,c时,拷贝构造函数起作用,序号设定为1,2;

    但调用函数f时,参数类型为numbered类型,又会触发拷贝构造函数,时每一次都将形参s的序号设定为新值,输出 3 4 5。

    例三:

     1 #include<iostream>
     2 using namespace std;
     3 class numbered{
     4 private:
     5     static int seq;
     6 public:
     7     numbered(){ mysn = seq++;}
     8     numbered(numbered &n) { mysn = seq++;}
     9     int mysn;        
    10 }; 
    11 int numbered::seq = 0;
    12 
    13 void f(const numbered &s){
    14     cout<<s.mysn<<endl;
    15 }
    16 int main(int argc,char**argv){
    17     numbered a,b=a,c=b;
    18     f(a);  f(b);  f(c); 
    19     return 0 ; 
    20 }
    View Code

    输出 0 1 2

    f的参数被改为const numbered &s,形参类型由类类型转变为引用类型,传递的不是类对象而是类对象的引用,这意味着调用f将不会触发拷贝构造函数将实参拷贝给形参,而是传递实参的引用。每次调用时,s都是指向实参的引用,序号自然是实参的序号,而不是创建一个新的对象。

  • 相关阅读:
    大数据学习之sqoop框架 25
    大数据学习之Flume框架 24
    大数据学习之Hive UDF及优化23
    大数据学习之HiveDDM数据操作语言22
    大数据学习之Hive数据仓库DDL数据定义语言21
    【MacOs】 SecureCRT设置linux终端显示颜色
    【MacOs】 VMware Fusion的NAT端口映射+静态IP
    【nginx】测试服务器配置内网项目转发
    【Linux】SSH连接linux时,长时间不操作就断开的解决方案
    【PHP】简易系统环境控制
  • 原文地址:https://www.cnblogs.com/wsl96/p/13279830.html
Copyright © 2011-2022 走看看