当前位置: 首页 > news >正文

C++ (友元)(类嵌套时,成员函数以及类声明定义的顺序)小demo

#include<iostream>
using namespace std;
class Building;
//1.因为Goodgay类需要声明Building类变量,
//所以Building类必须Goodgay类之前声明(前向声明);
class GoodGay
{
public:GoodGay();void visit();
private:Building *m_building;
//用指针搁置一下Building类的使用(此时无法使用),等到Building类写好了,
//再用类外成员函数来实例化一个Building类
};
class Building
//2.因为Building的定义中需要将Goodgay类的成员函数声明成友元成员函数,
//所以Building类必须Goodgay类之后定义;
{friend void GoodGay::visit();
public:Building(){m_sitting="客厅";m_bedroom="卧室";}string m_sitting;
private:string m_bedroom;
};
GoodGay::GoodGay()
//3.因为Goodgay中的构造函数需要调用Building的构造函数,
//所以Goodgay类中构造函数的实现必须在Building类的定义之后;
{m_building=new Building;
}
void GoodGay::visit()
{cout<<"visit 函数正在访问:"<<m_building->m_sitting<<endl;cout<<"visit 函数正在访问:"<<m_building->m_bedroom<<endl;
}
void test01()
{GoodGay gg;gg.visit();
}int main()
{test01();
}
#include<iostream>
using namespace std;
class GoodGay
{
public:void visit();
};
class Building
{friend void GoodGay::visit();
public:Building(){m_sitting="客厅";m_bedroom="卧室";}string m_sitting;
private:string m_bedroom;
};
Building B;//如果不在这里实例化Building,下面的B.XXX就会报错
void GoodGay::visit()
{cout<<"visit 函数正在访问:"<<B.m_sitting<<endl;cout<<"visit 函数正在访问:"<<B.m_bedroom<<endl;
}
void test01()
{GoodGay gg;//Building B;gg.visit();
}
int main()
{//Building B;test01();
}

编译只会从上到下遍历代码,不会像人一样跳读代码来找所需要的关键信息,出现一个新东西时要让编译器知道是什么。

http://www.lryc.cn/news/130930.html

相关文章:

  • 前端实习第五周周记
  • 【图论】Floyd算法
  • ceph数据分布
  • mysql的两张表left join 进行关联后,索引进行优化案例
  • 2018年3月全国计算机等级考试真题(语言二级C)
  • java.util.Timer简介以及简单使用示例
  • C语言笔试训练【第12天】
  • 外网连接局域网的几种方式?快解析内网穿透安全便利吗?
  • 基于互斥锁的生产者消费者模型
  • USB隔离器电路分析,SA8338矽塔sytatek电机驱动,源特科技VPS8701,开关电源,电源 大师
  • TPC-DS 测试是否支持 Glue Data Catalog?
  • 网络编程(8.14)TCP并发服务器模型
  • 认识负载均衡||WEBSHELL
  • Chapter 15: Object-Oriented Programming | Python for Everybody 讲义笔记_En
  • 模板编程-成员特化
  • 信安通用基础知识
  • 网上购物系统的设计与实现/在线商城/基于spring boot的电商平台/基于Java的商品销售系统
  • uniapp项目-配置store文件夹
  • element表格多选实现
  • 宠物智能自动喂食器方案设计
  • 学习笔记230818---对于promise失败状态处理的重要性
  • 【Redis】什么是缓存击穿,如何预防缓存击穿?
  • Android 13.0 强制app横屏显示
  • 平方数之和(力扣)双指针 JAVA
  • 深入浅出Pytorch函数——torch.nn.init.sparse_
  • OpenCV实现BGR2BayerGB/BG格式的转换
  • Gateway网关路由以及predicates用法(项目中使用场景)
  • 深入浅出Pytorch函数——torch.nn.init.constant_
  • centos mysql8解决Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  • Docker实战:Docker常用命令