zoukankan      html  css  js  c++  java
  • 类做友元类,类内声明,类外实现

    友元语法

    friend关键字只出现在声明处

    其他类、类成员函数、全局函数都可声明为友元

    友元函数不是类的成员,不带this指针

    友元函数可访问对象任意成员属性,包括私有属性

    友元类

    friend  class 类名

    友元类 是单向,不可传递的

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    using namespace std;
    
    class House;    //先声明,防止报错
    class GoodGay
    {
    public:
        GoodGay();        //类内声明
        void Visit();        //类内声明
        House * h;
    };
    class House
    {
        friend class GoodGay;    //把好基友类添加为友元类
    public:
        House();            //类内声明
        string m_SittingRoom;
    private:
        string m_BedRoom;
    };
    GoodGay::GoodGay()            // 类外实现构造函数 好基友类的构造函数,创建House对象
    {
        this->h = new House;
    }
    void GoodGay::Visit()        //类外实现成员函数 注意 返回值要与声明的一致
    {
        cout << "好基友正在访问:" << this->h->m_SittingRoom << endl;
        cout << "好基友正在访问:" << this->h->m_BedRoom << endl;
    }
    House::House()
    {
        this->m_SittingRoom = "客厅";
        this->m_BedRoom = "卧室";
    }
    void test()
    {
        GoodGay g;    //调用GoodGay构造函数
        g.Visit();    //访问Visit成员方法
    }
    
    int main()
    {
        test();
        system("Pause");        //阻塞功能
        return EXIT_SUCCESS;    // 返回正常退出
    }

    结果:

    [友元类注意]

    1.友元关系不能被继承。

    2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。

    3.友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友。

  • 相关阅读:
    粗浅看Struts2和Hibernate框架
    使用nexus搭建Maven私服
    在线支付功能的设计及其实现
    用户注册的邮箱激活模块的设计与实现
    WebService案例入门(基础篇)
    过滤器应用案例分析
    Java web文件上传下载
    Servlet常用操作(基础)
    AndroidStudio中导入SlidingMenu报错解决方案
    新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15170850.html
Copyright © 2011-2022 走看看