You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问其他类的函数?含C++类示例的技术咨询

嘿,这个问题在C++里太常见啦!我给你整理了几种实用的实现方式,结合你的例子来给你讲清楚:

1. 创建目标类的实例(最基础常用)

既然你例子里hello的function是public权限,那最简单的方式就是在hi的函数里直接创建一个hello的对象,然后调用它的函数就行。示例代码如下:

#include <iostream>
using namespace std;

class hello{
private:
public:
    void function(){
        cout << "来自hello类的function被调用啦!" << endl;
    }
};

class hi{
private:
public:
    void function(){
        // 先创建hello类的实例
        hello helloObj;
        // 直接调用它的public函数
        helloObj.function();
        
        // 这里可以继续写你自己的代码逻辑
    }
};

// 测试代码
int main(){
    hi hiObj;
    hiObj.function();
    return 0;
}

这种方式的优点是简单直接,适合不需要复用同一个hello对象的场景。

2. 使用指针/引用传递(复用对象场景)

如果你需要在hi类里一直操作同一个hello对象(比如要保持对象的状态),可以通过指针或者引用把hello对象传递给hi。示例代码:

class hello{
public:
    void function(){
        cout << "来自hello类的function被调用啦!" << endl;
    }
};

class hi{
private:
    hello* helloPtr; // 保存hello对象的指针
public:
    // 构造函数中传入hello对象的地址
    hi(hello* ptr) : helloPtr(ptr) {}
    
    void function(){
        // 通过指针调用hello的函数
        helloPtr->function();
    }
};

int main(){
    hello helloObj;
    hi hiObj(&helloObj); // 把helloObj的地址传给hi的构造函数
    hiObj.function();
    return 0;
}

这样hi类就能持续操作同一个hello对象,适合需要共享状态的场景。

3. 友元类(访问私有成员的特殊场景)

如果hello的function是private权限,而你只想让hi类能访问它,其他类不行,那可以把hi声明为hello的友元。示例代码:

// 先提前声明hi类,不然hello不知道hi是什么
class hi;

class hello{
private:
    void function(){
        cout << "hello类的private function被调用啦!" << endl;
    }
    // 声明hi是hello的友元类,hi可以访问hello的所有成员
    friend class hi;
};

class hi{
public:
    void function(){
        hello helloObj;
        helloObj.function(); // 现在能访问private的function了
    }
};

⚠️ 注意:友元会打破C++的封装性,除非真的有必要,否则不建议随便使用,尽量优先用public成员+实例的方式。

4. 静态成员函数(无需实例)

如果hello的function不需要访问类的成员变量,那可以把它声明为静态函数,这样不用创建对象,直接通过类名就能调用:

class hello{
public:
    static void function(){
        cout << "hello类的静态function被调用啦!" << endl;
    }
};

class hi{
public:
    void function(){
        // 直接用类名::静态函数名调用
        hello::function();
    }
};

int main(){
    hi hiObj;
    hiObj.function();
    return 0;
}

静态函数属于类本身,不属于任何实例,适合做一些工具类的通用函数。


内容的提问来源于stack exchange,提问作者Aaron Macasaet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:27:27