c++ 类名直接访问非静态函数?

简介: c++ 类名直接访问非静态函数?

今天看代码时,看到类似下面的代码,在Sub类InitSub函数中有一句 Base::Init();,以为C++语言可以直接使用类名调用非静态函数?当时有点想不通。

#include <iostream>
class Base{
public: 
  void Init() {
    std::cout<< "Init Base" << std::endl;
  }
};
class Sub : public Base {
public:
  void InitSub() {
        Base::Init(); // 使用类名调用了非静态函数?
    }
};
int main(){
    Sub sub;
    sub.InitSub();
    //Base::Init();
    return 0;
}

然后我就把  Base::Init(); 直接放到 main 函数中,果然编译不过,提示“ 不能在没有对象的情况下调用成员函数 ‘void Base::Init()’ ”,如下图

2018122814580746.png

所以,C++语言目前时无法用类名直接访问非静态的类成员函数的,那么为什么在 类Sub 中可以使用 Base::Init(); 呢?这里是使用来  Base::  类名作用域来指明 Init 函数的是Base里面的函数,假设 类Sub 也有 Init() 函数的话,那么运行时就会调用到 类Sub 的,这里显示指明使用 类Base 的 Init() 函数。


目录
相关文章
|
2月前
|
设计模式 存储 uml
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
C++ 设计模式实战:外观模式和访问者模式的结合使用,派生类访问基类的私有子系统
42 1
|
2月前
|
设计模式 安全 算法
【C++ 基础】超越边界:C++中真正不受访问修饰符限制的特性
【C++ 基础】超越边界:C++中真正不受访问修饰符限制的特性
44 0
|
2月前
|
数据安全/隐私保护 C++
c++访问
c++访问
28 0
|
17天前
|
存储 数据安全/隐私保护 C++
C++一分钟之-C++中的静态成员与静态函数
【6月更文挑战第20天】在C++中,静态成员(变量&函数)打破对象实例化规则,提供类级共享。静态变量独占一份,用于计数或共享配置,需类外初始化,注意访问权限。静态函数不依赖对象,直接通过类名调用,不使用`this`指针,适合工具函数或操作静态变量。示例展示了静态成员的使用,强调了理解和避免常见问题的重要性。
32 4
|
2月前
|
C++
C++中使用namespace关键字定义和访问命名空间的技术性探讨
C++中使用namespace关键字定义和访问命名空间的技术性探讨
18 3
|
2月前
|
C++
C++ 类的访问修饰符:深入解析
C++ 类的访问修饰符:深入解析
17 1
|
2月前
|
C++
C++程序中的派生类成员访问属性
C++程序中的派生类成员访问属性
26 1
|
1月前
|
存储 安全 编译器
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
11 0
|
2月前
|
存储 编译器 C语言
【C++】类与对象【定义、访问限定符、this指针】
【C++】类与对象【定义、访问限定符、this指针】
13 1
|
2月前
|
C++
C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 中的访问说明符(public, private, protected)用于控制类成员的可访问性,实现封装,增强数据安全性。public 成员在任何地方都可访问,private 只能在类内部访问,protected 则允许在类及其派生类中访问。封装提供数据安全性、代码维护性和可重用性,通过 setter/getter 方法控制对私有数据的访问。关注公众号 `Let us Coding` 获取更多内容。
37 1