首页 > 编程语言 >c++在类外是不能直接调用私有成员函数的

c++在类外是不能直接调用私有成员函数的

时间:2024-03-04 21:22:32浏览次数:30  
标签:调用 类外 私有 void private c++ 成员 函数

c++在类外是不能直接调用私有成员函数的,比如

#include <iostream>
using namespace std;

class A3  {
    void show3() {
        cout << "class A3"<< endl;   //注意,类内部默认是私有
    }
};
int main()
{
    A3 obj3;
    obj3.show3();   //这里出错
    return 0;
}

有两种方法能间接调用私有函数

1.通过类的public成员函数调用private成员函数:

#include <iostream>
using namespace std;
class Test
{
    public:
        void fun2()
        {
            fun1();
        }
    private:
        void fun1()
        {
            cout<<"fun1"<<endl;
        }
};
int main()
{
    Test t;
    t.fun2();
    return 0;
}

2.通过类的友元函数调用该类的private成员函数,但是该private成员函数必须设为static,这样就可以在友元函数内通过类名调用,否则无法调用

#include <iostream>
using namespace std;
class Test
{
    friend void fun2(); //fun2()设为类Test的友元函数
 private:
     static void fun1()
     {
         cout<<"fun1"<<endl;
     }
};
void fun2()
{
    Test::fun1();
}
int main()
{
    fun2();
    return 0;
}

 

标签:调用,类外,私有,void,private,c++,成员,函数
From: https://www.cnblogs.com/uacs2024/p/18052723

相关文章

  • C++U6-06 - 一维线性动态规划
    上节课作业:链接:https://pan.baidu.com/s/17Fei1SuGEk5pnSspf_hprg?pwd=hq04提取码:hq04 动态规划  [最长上升子序列]  本题采用动态规划。数据储存,设定数组a[]用于存储数字序列,设定dp[]数组用于统计上升的序列个数;遍历组数a[],在遍历的过程中如果出现了数......
  • C++ mySQL数据库连接池(windows平台)
    C++MySQL数据库连接池新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址关键技术点MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产......
  • C++ 简易STL 教程 与 C++ 标准库
    C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++提供了各种不......
  • C++U5-第06课-广度优先搜索3
    温故知新广搜的概念,编程实现基本流程 二进制矩阵中的最短路径]    【题意分析】找到一个从(0,0)到达(n-1,n-1)的路径并且路径上每一个数字都为0【思路分析】首先如果grid[0][0]=1,那么显然不存在最短路径,因此输出-1。使用dist[x][y]保存左上角单......
  • 【C++】【OpenCV-4.9.0】灰度图取反(Mat属性的使用)
    此次我们将一张图像转灰度后再进行灰度取反,即黑的变白的,白的变黑的,所以我们需要获取每个像素点上的灰度级,cv中提供了一个函数at,但是这个函数还有11个重载函数,太多了,我们只用这次需要用到的,即通过读取像素点的位置来获取灰度级。◆ at() [3/12]template<typename_Tp>c......
  • 提高C++编译速度
    提高C++编译速度BuildPerformanceInsights-Crascit如何分析和提高大型项目(C/C++)的编译速度?-知乎(zhihu.com)以上链接提供了提高编译速度的方案,以及如何检查是编译哪个文件花的时间最长。实践下来,我采用的方案是直接换用ninja来替代make,结合CMake计时参数,成功将......
  • C++ 命名空间
    在C++应用程序中。例如,您可能会写一个名为xyz()的函数,在另一个可用的库中也存在一个相同的函数xyz()。这样,编译器就无法判断您所使用的是哪一个xyz()函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。......
  • C++系列:const关键字
    前言在学习C++时,const关键字的知识点分散在书的各个章节。当我们尝试在编程时使用const时,总会感觉有一些细节被遗忘,因而不能得心应手地使用const关键字。因此,本篇文章尝试着对const关键字的做一些总结。参考书籍《C++PrimerPlus》const总结这里是我做的关于const关键字的一些......
  • (持续更新)c++结构体
    结构体指针作用:通过指针访问结构体中的成员利用操作符->可以通过结构体指针访问结构体属性 1.指针访问单一结构体#include<iostream>#include<string>#include<ctime>usingnamespacestd;structStudent{stringname;intage;intscore;};i......
  • C++ 动态内存
    C++ 动态内存C++程序中的内存分为两个部分:栈:在函数内部声明的所有变量都将占用栈内存。堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。在C++中,您可......