zoukankan      html  css  js  c++  java
  • C++知识点案例 笔记-2

    1.友元函数
    2.友元类
    3.继承(公有继承)
    4.公有继承的访问权限
    5.私有继承的访问权限
    6.保护继承的访问权限(两次继承)

    ==友元函数==
    
    #include <iostream>
    using namespace std;
    class love
    {
    public:
        love(int you,int me);
        friend int baby(love& );//################
    private:
        int Me;
        int You;
    };
    love::love(int you,int me)
    {
        You = you;
        Me = me;
    }
    int baby(love& refnum)
    {
        return refnum.You + refnum.Me ;//###########
    }
    int main()
    {
        love aini(500,21);
        cout<<"我想对你说:"<<baby(aini)<<endl;
        return 0;
    }
    
    ==友元类==
    #include <iostream>
    using namespace std;
    class Date;                                              //声明Date类
    class Time                                               //定义Time类,描述时分秒
    {
    public:
        Time(int con_hour, int con_minute, int con_second) //定义构造函数
        {
            m_nHour = con_hour;
            m_nMinute = con_minute;
            m_nSecond = con_second;
    
        }
        friend class Date;                                 //声明Date为Time的友元类
    private:
        int m_nHour, m_nMinute, m_nSecond;
    };
    class Date                                               //定义Date类
    {
    public:
        Date(int con_year, int con_month, int con_day)//定义构造函数
        {
            m_nYear = con_year;
            m_nMonth = con_month;
            m_nDay = con_day;
        }
        void display_date_time(Time &ref_time);        //声明display_date_time()函数
    private:
        int m_nYear, m_nMonth, m_nDay;
    };
    /*
    * 定义display_date_time()函数,显示年月日、时分秒信息。由于Date为Time类的友元类,
    * 则Date中的函数为Time类的友元函数,可以访问Time类的私有成员,
    * 这里直接访问了私有成员:m_nHour、m_nMinute、m_nSecond
    */
    void Date::display_date_time(Time &ref_time)
    {
        cout << m_nYear << "-" << m_nMonth << "-" << m_nDay << " "
            << ref_time.m_nHour << ":" << ref_time.m_nMinute//################
            << ":" << ref_time.m_nSecond << endl;                          //###############
    }
    int main()
    {
        Time time(17, 30, 20);                          //定义Time对象
        Date date(2017, 2, 23);                         //定义Date对象
        date.display_date_time(time);                  //显示年月日、时分秒信息
        return 0;
    }
    
    
    
    
    ==继承(公有继承)==
    #include <iostream>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
        void speak()
        {
            cout<<"animal language."<<endl;
    
        }
    };
    class Dog :public Animal    //继承Animal的属性
    {
    public:
        Dog (string con_name):m_Name(con_name){}
        void print_name()
        {
            cout<<"con_name:"<<m_Name<<endl;
        }
    private:
        string m_Name;
    
    };
    int main()
    {
        Dog dog("dogoo");
        dog.speak();              //调用其继承的Animal属性里的speak函数
        dog.print_name();
        return 0;
    }
    
    
    ==公有继承的访问权限==
    #include <iostream>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
        void set_weight(int weight){m_Weight = weight;}
        int get_weight(){return m_Weight;}
        void set_age(int age){m_Age = age;}
    protected:                                                                            
        int m_Age;    //protected成员可以被派生类访问
    private:
        int m_Weight;     //私有成员被派生类不可访问
    };
    class Dog:public Animal
    {
    public:
        Dog (string con_name):m_Name(con_name){}
        void print_age(){ cout<<m_Name<<",age="<<m_Age<<endl; }    //这里直接访问了//#################
    private:
        string m_Name;
    };
    int main()
    {
        Dog dog("dogoo");
        dog.set_weight(6);
        dog.set_age(8);
        dog.print_age();
        cout<<"weight ="<<dog.get_weight()<<endl;          //这里通过继承基类成员函数输出weight值,不可直接访问
        return 0;
    
    }
    
    
    ==私有继承的访问权限==
    //把从基类继承的protected、public成员当做私有成员,主函数不能直接访问基类的成员
    #include <iostream>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
        void set_weight(int weight){m_Weight = weight;}
        int get_weight(){return m_Weight;}
        void set_age(int age){ m_Age = age; }
    protected:
        int m_Age;
    private:
        int m_Weight;
    };
    class Dog:private Animal
    {
    public:
        Dog(string con_name):m_Name(con_name){}
        void set_print_weight()
        {
            set_weight(6);                               //################
            cout<<m_Name<<",weight = "<<get_weight()<<endl;
        }
        void set_print_age()
        {
            set_age(8);                                    //#################
            cout<<m_Name<<",age = "<<m_Age<<endl;
        }
    private:
        string m_Name;
    };
    int main()
    {
        Dog dog("dogoo");
        dog.set_print_weight();    //通过派生类的访问来访问基类成员
        dog.set_print_age();
        return 0;
    }
    
    
    
    ==保护继承的访问权限(多重继承:类Animal——>次类Dog——>再次类Dog_plus)==
    //把从基类继承的protected、public成员当做保护成员
    #include <iostream>
    #include <stdlib.h>
    #include <string>
    using namespace std;
    class Animal
    {
    public:
        void set_weight(int weight){m_Weight = weight;}
        int get_weight(){return m_Weight;}
        void set_age(int age){m_Age = age;}
    protected:
        int m_Age;
    private:
        int m_Weight;
    };
    class Dog:protected Animal                                         //#################
    {
    
    public:
        Dog(string con_name):m_Name(con_name){}
        void set_print_weight()
        {
            set_weight(8);
            cout<<m_Name<<",weight ="<<get_weight()<<endl;
        }
    private:
        string m_Name;
    };
    class plus_Dog:protected Dog                                     //###################
    {
    public:
        plus_Dog():Dog("dogoo"){ }
        void plus_set_print_age()
        {
            set_age(6);
            cout<<"The plus_dog age = "<<m_Age<<endl;
        }
    
    };
    int main()
    {
        plus_Dog plus_dog;
        plus_dog.plus_set_print_age();
        system("pause");
        return 0;
    }
    
    

    ________________________________________________________

    Every good deed you do will someday come back to you.

    Love you,love word !
  • 相关阅读:
    Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint
    Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
    Azure China (7) 使用WebMetrix将Web Site发布至Azure China
    Microsoft Azure News(4) Azure新D系列虚拟机上线
    Windows Azure Cloud Service (38) 微软IaaS与PaaS比较
    Windows Azure Cloud Service (37) 浅谈Cloud Service
    Azure PowerShell (6) 设置单个Virtual Machine Endpoint
    Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机
    功能代码(1)---通过Jquery来处理复选框
    案例1.用Ajax实现用户名的校验
  • 原文地址:https://www.cnblogs.com/hugboy/p/12738149.html
Copyright © 2011-2022 走看看