美文网首页
C++拷贝构造函数和友元

C++拷贝构造函数和友元

作者: dafaycoding | 来源:发表于2016-12-16 11:07 被阅读21次

拷贝构造函数和友元

C++控制类对象私有部分的访问,但有时候需要在类的外部访问类的私有成员,这种情况下C++提供了友元机制。

//
//  main.cpp
//  CPlusPlusLanguage
//
//  Created by idea on 2016/12/16.
//  Copyright © 2016年 idea. All rights reserved.
//

#include <iostream>
using namespace std;

class demo{
private:
    int i;
public:
    demo(){  //构造
        cout << "demo" << endl;
    }
    demo(const demo &it){  //拷贝构造
        cout << "copy demo" << endl;
    }
    
    ~demo(){   //析构
        cout << "~demo" << endl;
    }
    
    void set_i(int i){
        this-> i= i;
    }
    
    int get_i(){
        return i;
    }
    
    friend void test_3();;//意思是声明一个该类的友元函数
    friend class demo1;//意思是声明一个该类的友元类
    
};

int main_1(int argc, const char * argv[]) {
    demo d;         //声明一个实例,自动调用构造函数
    d.set_i(100);
//    demo d1=d;      //这个操作导致拷贝构造函数的调用
//    demo d1(d);       //和上面的语句等效
    
    demo d1;
    d1=d;               //这个地方没有调用拷贝构造,只是简单的=号赋值
    
    std::cout << "d1.get_i()=" << d1.get_i() << endl;
    std::cout << "Hello, World!\n";
    return 0;
}

void test(demo d){
    d.set_i(100);
}

void test_1(demo &d){ //在c++里面,如有一个函数的参数是对象,就会有拷贝构造发生,使用引用可以避免
    d.set_i(100);
}


int main_2(int argc, const char * argv[]) {
    demo d;         //声明一个实例,自动调用构造函数
    test(d);        //类作为参数传给另外一个函数,会调用拷贝构造函数
    
    std::cout << "d.get_i()=" << d.get_i() << endl; //这个地方输出未被初始化的值
    std::cout << "Hello, World!\n";
    return 0;
}


demo test(){
    demo d;
    return d;
}

int main3(int argc, const char * argv[]) {
    demo d=test();         //不同的编译器和不同的操作系统 回有不同的结果,表示:c++只是一种规范,跨平台的应用要考虑这个问题
    std::cout << "Hello, World!\n";
    return 0;
}


void test_3(){
    demo d;
    cout << d.i << endl;
}

class demo1
{
public:
    demo1()
    {
        demo d;
        d.i = 100;
    }
    friend class demo2;
};


class demo2
{
public:
    demo2()
    {
        demo d;
//        d.i = 100; //我的朋友的朋友,不能等同于是我的朋友
    }
};


int main(int argc, const char * argv[]) {
    test_3();
    std::cout << "Hello, World!\n";
    return 0;
}

相关文章

  • C++学习二

    一、构造函数和析构函数 二、拷贝构造函数 三、常量相关 四、static关键字 五、this 六、友元函数 七、友...

  • C++拷贝构造函数和友元

    拷贝构造函数和友元 C++控制类对象私有部分的访问,但有时候需要在类的外部访问类的私有成员,这种情况下C++提供了...

  • c++学习笔记2(GeekBand)

    拷贝构造、拷贝赋值和析构 c++中有Big Three三个特殊的函数,他们就是拷贝构造函数,拷贝赋值函数和析构函数...

  • C++ 构造函数,类的成员变量

    c++ 05 构造函数无参构造函数有参构造函数 拷贝构造函数 浅拷贝 深拷贝 类的成员变量 四类特殊的成员变量

  • [C++之旅] 12 拷贝构造函数

    [C++之旅] 12 拷贝构造函数 拷贝构造函数的特点 如果没有自定义的拷贝构造函数则系统自动生成一个默认的拷贝构...

  • C++拷贝控制

    前言 C++通过在类中定义几个成员函数来控制的对象的拷贝,移动,赋值和销毁,分别如下: 拷贝构造函数和移动构造函数...

  • C++ 拷贝控制(二) — 移动构造函数和移动赋值运算符

    相关文章: C++ 拷贝控制(一) — 析构函数、拷贝构造函数与拷贝赋值函数 C++ 引用类型 — 左值引用、常引...

  • C++ 拷贝构造函数浅析

    什么是拷贝构造函数:拷贝构造函数,顾名思义,就是在拷贝的时候调用的构造函数。 几个原则:C++ primer p4...

  • C++拷贝构造函数——难点

    拷贝构造函数 - C++详细 | 编程字典

  • C++ 拷贝构造函数/深拷贝与浅拷贝

    1. C++拷贝构造函数(复制构造函数) 拷贝和复制是一个意思。 对于计算机来说,拷贝是指用一份原有的、已经存在的...

网友评论

      本文标题:C++拷贝构造函数和友元

      本文链接:https://www.haomeiwen.com/subject/tpdnmttx.html