zoukankan      html  css  js  c++  java
  • C++第四次作业

    在完成C++教程5-13作业的时候我发现了一个这样的问题,当需要把一个函数的成员函数当做另外一个函数的友元函数的时候,可能是存在一个约定俗成的规则,或者是一个编译器偶然现象,如果读完了有一些想法可以在评论区留下你的意见。

    #include"pch.h"
    #include<iostream>
    using namespace std;
    class X;
    
    class Y {
    public:
    	void g(X *p);
    };
    class X {
    public:
    	X(int i = 0) { this->i = i; }
    	void showNum() { cout <<"当前i的值是:"<< i << endl; }
    	friend void h(X *p) { p->i += 10; }
    	friend void Y::g(X *p);
    	friend class Z;
    private:
    	int i;
    };
    class Z {
    public:
    	void f(X *p) { p->i += 5; }
    
    };
    //为什么逻辑分离出来就可以,写在Y类里面就是会报错?
    void Y::g(X *p)
    {
    	(p->i)++;
    }
    using namespace std;
    int main()
    {
    	X x(5);
    	x.showNum();
    	X *p;
    	X *p1;
    	X *p2;
    	p1 = &x;
    	p2 =p1;
    	p =p1;
    	Y y;
    	Z z;
    	h(p);
    	x.showNum();
    	y.g(p1);
    	x.showNum();
    	z.f(p2);
    	x.showNum();
    }
    

    在这里插入图片描述
    大家可以发现我在X中用域符号声明Y的成员函数是X的友元函数。
    在这里插入图片描述
    在Y类中的声明:
    在这里插入图片描述
    函数的g()在外部实现:
    在这里插入图片描述
    但是我如果把这个函数实现和函数声明在类Y中不分离的话就会报错:
    在这里插入图片描述
    在这里插入图片描述
    我也有和老师讨论过,在网上查询解答可能是一个约定俗成的规则。对于这个问题,我想呢,以后在写类的时候尽可能的使用逻辑分离把类中的方法在类外部养成这样的编程习惯。

  • 相关阅读:
    python标准库学习-SimpleHTTPServer
    迁移cnblog博客
    zabbix监控使用
    20 个 OpenSSH 最佳安全实践
    编写基本的 udev 规则
    Linux.Siggen.180
    在 CentOS 7.0 上安装配置 Ceph 存储
    常用 GDB 命令中文速览
    Kubernetes TLS认证
    音乐下载api
  • 原文地址:https://www.cnblogs.com/Eldq/p/11646683.html
Copyright © 2011-2022 走看看