首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们可以从c++中的成员函数访问non_member函数

在C++中,成员函数可以访问非成员函数,这是因为成员函数具有对类的所有成员的访问权限,包括非成员函数。

成员函数是定义在类内部的函数,它们可以访问类的私有成员、保护成员和公有成员。而非成员函数是定义在类外部的函数,它们没有直接访问类的成员的权限。

当一个成员函数需要调用一个非成员函数时,可以直接通过函数名进行调用。这是因为在C++中,成员函数和非成员函数都属于同一个命名空间,因此成员函数可以直接访问非成员函数。

这种设计使得C++中的类具有更高的灵活性和可扩展性。通过将相关的函数组织在一起,可以更好地管理和维护代码。非成员函数可以用于实现一些与类相关但不需要直接访问类成员的功能,从而提高代码的模块化程度。

以下是一个示例代码,展示了如何从C++中的成员函数访问非成员函数:

代码语言:txt
复制
#include <iostream>

// 非成员函数
void nonMemberFunction() {
    std::cout << "This is a non-member function." << std::endl;
}

class MyClass {
public:
    void memberFunction() {
        std::cout << "This is a member function." << std::endl;
        
        // 调用非成员函数
        nonMemberFunction();
    }
};

int main() {
    MyClass obj;
    obj.memberFunction();
    
    return 0;
}

输出结果为:

代码语言:txt
复制
This is a member function.
This is a non-member function.

在这个示例中,memberFunction是一个成员函数,它可以直接调用nonMemberFunction这个非成员函数。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

_类内成员函数可以访问本类对象私有成员

类内成员函数可以访问本类对象私有成员 sList是一个类 私有成员是head,有一个成员函数形参是本类对象(引用,引不引用不影响结论和原因) ==为什么呢!...head明明是b私有成员为什么可以访问了!!??== 因为!...对象b是sList类,而这个intersection函数是sList成员函数 head虽然是sList类对象私有成员,但是是在sList类内访问 ==就是 在类内访问了本类(实例化对象)私有成员...本来就是类成员,只是抽象和实例化问题 这非常合理地体现了 类 封装性 这个就是不行,在类外访问了 这一点是非常好用可以利用这一点 ==用成员函数肆无忌惮地访问对象私有成员!...==只要声明函数是类成员函数,将外部同类对象设为形参(或加个引用)就可以了!! 不必再为如何访问到同类外部对象私有成员而苦思了!

85430

C++const成员变量和成员函数

在类,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量函数名字通常以get开头,后跟成员变量名字,所以通常将它们称为 get 函数。...,仅仅是为了获取成员变量值,没有任何修改成员变量企图,所以我们加了 const 限制,这是一种保险做法,同时也使得语义更加明显。

26830
  • C++C++ this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类 , 定义了 void fun(int...与 非静态普通成员变量 都不能修改 ; 不能调用非常量成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常量成员函数 , 以保证不会修改 成员变量 ; " 常量成员函数 " 只能访问 常量成员变量...其它常量成员函数 如果类 成员变量 不是 常量 , 那么 " 常量成员函数 " 不能访问它们 ; public: int age; // 年龄 int height; // 身高 如果类...成员变量 是 常量 , 那么 " 常量成员函数 " 可以访问它们 , 注意 : 只能访问 , 不能修改 ; public: const int age; // 年龄 const int height...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数 不能修改 类对象 任何成员变量 ; class Student { public: void fun

    22020

    C++初阶(类默认成员函数

    6个默认成员函数 如果一个类什么成员都没有,简称为空类。 空类真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。...,我们可以再定义对象时候,直接给成员变量初始化了,是不是感觉简单了几步呢。...由此我们可以得知一些构造函数特性。 1.2特性 构造函数是特殊成员函数,需要注意是,构造函数虽然名称叫构造,但是构造函数主要任务并不是开空间创建对象,而是初始化对象。...所以当我们要调用无参构造函数时,我们直接写Date d1; 就可以了。 还有就是,如果我们没有写构造函数,其实C++编译器会自动生成一个无参默认构造函数,一旦用户显式定义编译器将不再生成。...1.3C++11更新 在C++11标准里,针对内置类型成员不能初始化缺陷,打了个补丁,就是:内置类型成员变量在类声明时可以给默认值 #include using namespace

    15110

    C++初阶——(类默认成员函数)下

    时隔多天默认成员函数,在上篇博客我们讲了,构造函数和析构函数。简单回顾下,构造函数就是类似于初始化函数,他函数名与类名相同,且没有返回值。...1.拷贝构造函数 假设我们已经创建了一个对象,如果我们还想再创建一个对象且这个对象和前一个对象值一模一样,我们要怎么呢?调初始化就太麻烦了,我们可以直接用以创建对象拷贝给新对象吗?...为什么会这样呢? 编译器默认生成拷贝构造函数,默认拷贝构造函数是按照值拷贝,即将s内容原封不动拷贝到s2.由此 s和s2指向了同一块内存空间。...C++规定:后置++在重载时多增加一个int类型参数,但调用函数时不用传第,编译器会自动传递。...3.const成员 将const修饰成员函数”称为const成员函数,const修饰成员函数实际修饰该成员函数隐含this指针,表明在该成员函数不能对类任何成员进行修改。

    8610

    C++入门到精通——类6个默认成员函数之构造函数

    默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。 class Date {}; 一、构造函数概念 C++构造函数是一种特殊成员函数,用于创建和初始化类对象。...我们可以在构造函数成员变量进行赋值或执行其他初始化操作,以确保对象在创建时具有合适初始状态。 使用构造函数可以方便地创建对象并进行初始化操作,提高代码简洁性和可读性。...在C++,构造函数在对象创建时自动调用,而析构函数则在对象被销毁时自动调用,它们共同组成了C++构造函数和析构函数机制,用于管理对象生命周期。...,自定义类型就是我们使用class/struct/union等自己定义类型,看看下面的程序,就会发现编译器生成默认构造函数会对自定类型成员_t调用默认成员函数。...注意:无参构造函数、全缺省构造函数我们没写编译器默认生成构造函数,都可以认为是默认构造函数

    16410

    C++static成员函数以及static成员变量详解「建议收藏」

    static成员变量,在编程我们时常都会遇到,那么你是否对static变量以及static成员函数有一定深入认识呢?...int Student::m_rate = 5; // 类外初始化static变量 int main() { Student::set_rate(6); // static 成员函数可以直接使用类名进行访问...,也可以使用对象进行调用访问 system("pause"); return 0; } 在C++中有时会定义一些static变量,同时也会定义一些static成员函数。...对于static成员函数以及属性调用需要注意点有以下几个: 1.static成员函数调用成员变量(属性)只能够是static成员属性,不能够调用普通成员变量属性(因为编译器无法确定调用是哪个对象成员属性...4.static成员属性以及static成员函数都不存在this指针(并不属于任何一个成员); 5.static成员属性能够被继承,可以在派生类访问到(前提:原有属性为公有,继承为公有继承),但是存储只是一份数据

    83030

    C++入门到精通——类6个默认成员函数之拷贝构造函数

    拷贝构造函数 前言 一、拷贝构造函数概念 理解 定义 二、拷贝构造函数特征 三、注意要点 写法 实践 前言 类6个默认成员函数:如果一个类什么成员都没有,简称为空类。 空类真的什么都没有吗?...class Date {}; 一、拷贝构造函数概念 理解 在现实生活,可能存在一个与你一样自己,我们称其为双胞胎。 那在创建对象时,可否创建一个与已存在对象一某一样新对象呢?...C++拷贝构造函数是一种特殊构造函数,用于创建对象时,使用一个已有对象内容来初始化新对象。它接受一个同类对象作为参数,并按照该对象数据成员值来创建新对象。...如果类包含指针类型数据成员,需要自己定义拷贝构造函数,进行深拷贝,确保指针指向对象也被复制。 注意,拷贝构造函数是类成员函数,通常定义在类公有部分。...如Date(日期类) 如果都是自定义类型成员,内置类型成员没有指向资源,也类似默认生成拷贝构造函数可以

    29110

    C++入门到精通——类6个默认成员函数之析构函数

    析构函数 前言 一、析构函数概念 二、析构函数特性 三、析构函数练习题 四、总结 前言 类6个默认成员函数:如果一个类什么成员都没有,简称为空类。 空类真的什么都没有吗?...在C++,析构函数是一种特殊成员函数,用于在对象被销毁时清理其使用资源。它名称与类名称相同,前面加上一个波浪线(~),没有返回类型,也不接受任何参数。...下面的程序我们会看到,编译器生成默认析构函数,对自定类型成员调用它析构函数。跟构造函数类似,内置类型不做处理,自定义类型调用它析构函数。...Time类对象,为什么最后会调用Time类析构函数?...,销毁那个类对象则调用该类析构函数 如果类没有申请资源时,析构函数可以不写,直接使用编译器生成默认析构函数,比如Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。

    35210

    C++】类和对象():类默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    ,所以全缺省构造函数和无参构造函数不能同时存在,在之前介绍函数重载时候就说过,不清楚去看看【C++C++入门知识详解(下)-CSDN博客 用全缺省构造函数是最好,因为我们可以不传参,都传参,传一部分参...这里解释一下为什么拷贝构造第一个参数传参方式必须是引用。 首先我们要知道,C++规定传值传参要调用拷贝构造,没有为什么,就是规定。比如说下面这个f1函数。...在C语言中实参传给形参就是直接拷贝过去,不会调用一个函数,在C++传值传参要调用拷贝函数我们在直接调用拷贝构造函数时,因为是引用传参,就不会形成新拷贝函数。...这也就是为什么我在这一小节开头并没有自己写拷贝构造函数代码但依然可以进行拷贝构造。..._day; } 但是我们可以在类外访问私有的成员,这些_year, _month, _day都是私有成员,那咋办? 用友元函数。在类里面加上下面这句话。

    8810

    C++一分钟之-C++静态成员与静态函数

    C++编程,静态成员与静态函数是类设计重要概念,它们打破了常规成员“每个对象一份”规则,为类所有实例共享同一份数据或行为提供了途径。...避免策略:在类内或外部显式初始化静态成员,确保有序初始化。 访问权限:误以为静态成员可以直接通过类名访问而忽视访问权限。 避免策略:遵守访问控制规则,私有静态成员不能直接类外访问。...静态成员函数 基本概念 静态成员函数不依赖于类任何实例,它可以通过类名直接调用,不接收隐含this指针。 用途 工具函数:执行与类相关操作,但不需要访问非静态成员。...访问静态成员:操作静态成员变量理想场所。 常见问题与避免 误用this指针:静态成员函数不存在this指针,尝试使用会导致编译错误。...通过本文介绍和示例,希望你能准确把握静态成员与静态函数精髓,避开常见陷阱,更加自信地在C++项目中运用它们。

    20010

    C++核心准则C.4:只有直接访问表达函数,才应该成为成员

    和使用成员函数相比普通函数耦合性略低,一方面可以通过修改对象状态带来麻烦函数会变少,另一方面可以减少改变类表达时需要修改函数数量。...如果C++可以导入“统一函数调用”这条准则甚至会变得更完美。 译者注:“uniform funcation call”是C++之父本人提出C++语法建议。...(C++)语言要求虚函数必须是成员,而且不是所有的虚函数都会直接访问数据。通常抽象类成员很少直接访问数据。 Note multi-methods....寻找没有直接接触数据成员非虚成员函数。讽刺是存在许多不需要直 接访问数据成员成员函数。 Ignore virtual functions. 忽略虚函数。...如果一组重载函数至少有一个函数访问了私有成员,那么忽略其他函数。 Ignore functions returning this. 忽略返回this指针函数

    34720

    C++C++ this 指针用法 ③ ( 全局函数成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

    一、全局函数成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数 , 通过 this 指针访问对象本身成员 ; 在全局函数 , 实现两个 Student 类相加 , 接收两个...; 如下带参数构造函数 , 并且为其 有参构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象名 方式定义对象变量 ; class Student { public: // 带参构造函数...height; // 身高 }; 此时就可以使用默认构造函数 , 创建 Student 对象 ; 三、返回匿名对象与返回引用 ---- 在上面的章节 , 将 两个 Student 对象相加 ,...返回是一个匿名对象 , 该匿名对象 是在 成员函数 中新创建对象 ; // 成员函数, 将两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个新

    22320

    C++】构造函数初始化列表 ③ ( 构造函数 初始化列表 为 const 成员变量初始化 )

    构造函数初始化列表 总结 : 初始化列表 可以 为 类 成员变量 提供初始值 ; 初始化列表 可以 调用 类 成员变量 类型 构造函数 进行成员变量初始化操作 ; 初始化列表 可以 使用 构造函数...传入 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 一、构造函数 初始化列表 为 const 成员变量初始化 1、初始化 const 常量成员 如果 类 定义了 被 const 修饰 成员变量...} // 构造函数参数可以作为 参数列表 参数值 B(int age, int ageOfA, int heightOfA) : m_age(age), m_a(ageOfA, heightOfA...(10), m_a(10, 150), m_const_int(888) {} // 构造函数参数可以作为 参数列表 参数值 B(int age, int ageOfA, int heightOfA

    21830

    C++入门到精通——类6个默认成员函数之赋值运算符重载

    友元函数可以是全局函数,也可以是其他类成员函数。在C++,使用关键字friend来声明友元函数。友元函数定义通常在类外部。...友元函数特点是可以绕过类访问权限,直接访问私有成员和保护成员。这在一些特殊情况下很有用,例如需要在其他类对该类私有成员进行操作或者需要在全局函数操作该类私有成员。...友元函数具体用法可以分为两种情况: 全局函数作为友元函数:全局函数可以在类外部定义,并通过friend关键字声明为友元函数。在全局函数定义可以直接访问该类私有成员和保护成员。...对象成员函数作为友元函数:在另一个类成员函数通过友元关键字将该类成员函数声明为友元函数。在友元函数定义可以直接访问该类私有成员和保护成员。...需要注意是,友元函数并不是类成员函数,因此不能直接访问成员变量和成员函数。如果需要访问成员变量和成员函数可以通过对象来访问

    12410

    C++】继承 ④ ( 继承对访问控制权限影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )

    一、继承相关概念 1、继承不包括构造与析构函数 子类 继承 父类 所有成员 , 包括 成员变量 和 成员方法 ; 子类 不会 继承 父类 构造函数 和 析构函数 ; 2、继承改变成员访问权限 父类... 成员变量 和 成员方法 访问属性 , 在 子类 可以调整 ; 如 : private , protected , public 访问属性 , 在 子类 可以发生改变 ; 二、访问控制权限回顾...1、访问权限 访问控制权限 : 公有成员 public : 公有成员可以被任何对象访问 , 包括类外部和所有该类派生子类 ; 完全开放 : 如果一个成员被声明为公有 , 那么它可以在任何地方被访问...private : 私有成员 只能被该类成员函数访问 , 包括友元函数和派生类覆盖函数 ; 完全封闭 : 在 类外部 和 子类 中都不能访问私有成员 ; private 是最安全访问控制级别...---- 1、访问权限判定 C++ 继承方式 对 子类 成员变量 和 成员方法 会造成影响 , 成员访问属性 需要看根据下面的逻辑进行判定 : 调用位置 : 看是在哪调用 , 在 类内部 ,

    23110

    关于C++操作符重载疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数

    C++规定有四个运算符 =, ->, [], ()不可以是全局域中重载(即不能重载为友员函数),这是为什么呢?...那么为什么赋值运算符不可以重载为类友元函数?像同样都是双目运算符+为什么它就可以呢?...在此,我们可以C++规则做出以下判断:   当类没有定义赋值运算符重载成员函数时(注意,在未定义形参数据类型为该类类型赋值运算符重载函数时,编译器会自动生成加入),当程序执行到某一赋值语 句时,...当明白上面的规则后,现在就可以回过来,讨论为什么赋值运算符不可以重载为类友元函数了。 我们知道友元函数不是类成员函数,它只是类“朋友“,具有访问把它声明为“朋友”数据成员权限而已。...例当类A没有定义运算符->重载成员函数,但是我们仍然可以对类A对象指针用->形式调用指针指向对象里成员

    1K20
    领券