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都是指向实参的引用,序号自然是实参的序号,而不是创建一个新的对象。

  • 相关阅读:
    sqlserver2005分页
    windows计划任务
    sqlserver 2005 通信格式
    sqlserver 导出数据到excel
    所有连接sqlserver 2005 数据库的驱动程序
    Sql 2000 中行转列的查询方法
    [转] ASP.NET中使用javascript
    [转]17种常用正则表达式
    正则式正反向预编译(实战)
    正则表达式的正反向预编译
  • 原文地址:https://www.cnblogs.com/wsl96/p/13279830.html
Copyright © 2011-2022 走看看