zoukankan      html  css  js  c++  java
  • 十七章 包含,友元,嵌套

    学到这里,首先要恭喜你,你的C++之旅快要接近尾声了。是个值得庆贺的事情。不过还是不能太松懈,因为重头戏模板和STL你还没了解了。别急,先学下本章吧。言归正传,我们先来了解下包含.

    包含
       什么是包含?顾名思义,就是一个对象包含另一个对象C++的语法我们已了解了不好了,相信自己也尝试了离开书籍的帮助编写了一些小程序,我们有这些基础相信学习本章不会有很大难度

    。首先请看下面这个简单的包含Demo

    #include<iostream>
    using namespace std;
    //包含的简单Demo
    class A//被包含的类A
    {
    public:
        A();
        A(int);
        void get();
    private:
        int x;
    };
    A::A(int y){x=y;}
    void A::get(){cout<<x<<endl;}

    class B
    {
    public:
        B(int y):a(y){;}
        void get(){a.get();}
    private:
        A a;//包含类A对象a
    };
    int main()
    {
        B b(50);
        b.get();
        system("pause");
        return 0;
    }

    demo代码中类B对象包含一个私有对象类a,这里的类A被类B包含.在类B里只能访问L类A提供的共有函数接口.我们是不是觉得和私有继承类似呢?由于代码较简单,我们在这里不在一一讲解..

    在本章节最后会讲解包含和私有继承的区别,以及什么时候选择包含,什么时候选择私有继承.

    友元类
    什么是友元类?我们举个生活中的例子.比如小朋友的遥控汽车,如果这里我们把汽车看成一个类的话,那么遥控器就是汽车的友元类,因为它可以控制汽车,而汽车不可以控制遥控器.汽车和遥

    控器本身并不关联.但是将遥控器变成汽车的友元类,那么要控制就可以控制汽车了。。
      友元类怎么声明呢?比如汽车类Car,我们只需要在汽车的Car里面添加friend说明,那么遥控器车就可以控制汽车呢.请看Demo演示

    #include<iostream>
    using namespace std;
    //友元类Demo演示
    class Car
    {
    public:
        friend class Tele;//请注意这行(关键)
        Car(int i);
        void set(int i);//添加该方法主要是演示在友元类中可以访问(设置汽车开关)
        void get();//添加该方法主要是演示在友元类中可以访问(获取汽车开关状态)
    private:
        int on_off;
    };
    Car::Car(int i):on_off(i){}
    void Car::set(int i){on_off=i;}
    void Car::get()
    {
        if(on_off==0)
        {
            cout<<"汽车是开关处于关闭状态"<<endl;
        }
        else
        {
            cout<<"汽车是开关处于打开状态"<<endl;
        }
    }

    class Tele
    {
    public:
        void set(Car &c,int i)
        {
            c.set(i);
            //c.on_off=1;
        }
        void get(Car &c)
        {
            c.get();
        }
    };
    int main()
    {
        Car c(0);
        Tele t;
        t.set(c,1);
        t.get(c);
        system("pause");
        return 0;
    }

    聪明的读者获取尝试着注释friend class Tele;//请注意这行(关键)这句话,发现程序依然可以访问.那么获取会问,既然能访问,为什么要增加友元了?好像没必要.其实错了.我们这里注释

    friend能访问的原因是因为在Tele类里访问的都是Car类的共有函数,如果我们尝试着注释那句话然后在Tele的set函数里添加c.on_off=1;这句话在运行就会提示错误呢?为什么呢?因为on_off

    是私有.外部不可以访问,而添加friend程序就可以运行了。友元类可以访问类的共有,私有.就相当于是在类内部访问一样…还有说明的是friend可以放在public,protected,private任何一个

    模块内,没有限制。


    嵌套类
      顾名思义,一个类中嵌套另外一个类.我们看下Demo代码

    #include<iostream>
    using namespace std;
    //嵌套 Demo
    class A
    {
    public:
        class B//被嵌套的类B
        {
        public:
            B(int i):x(i){}
            void get(){cout<<x<<endl;}
        private:
            int x;
        };
        A(int i):b(i){}
        void get(){b.get();}
    private:
            B b;
    };
    int main()
    {
        A a(30);
        a.get();
        system("pause");
        return 0;
    }

    我们在类A内部定义了一个类B.私有变量定义了这个类B变量b.在类A构造函数中给类B进行了初始化.用类A的get()方法成功的访问了内部类型类B的方法..

    以上就是本章节的全部内容.代码很简单.目的也很简单。就是希望大家能通过观看简单的代码了解C++..

  • 相关阅读:
    价值投资-买股票操作流程
    win10安装mysql8
    .NET Debugging Demos Lab 7: Memory Leak
    .NET Debugging Demos Lab 6: Debugging Challenge
    .NET Debugging Demos Lab 5: Crash
    .NET Debugging Demos Lab 3: Memory
    .NET Debugging Demos Lab 1: Hang- Walkthrough
    .NET Debugging Demos Lab 1: Hang
    【翻译 windbg-3】高级WinDbg 使用教程
    【翻译 windbg-2】Getting started with windbg
  • 原文地址:https://www.cnblogs.com/xuting/p/2544360.html
Copyright © 2011-2022 走看看