【C++】static 关键字的特性 与 问题

这篇具有很好参考价值的文章主要介绍了【C++】static 关键字的特性 与 问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义

  • 声明为 static的类成员称为类的静态成员

  • static修饰的成员变量,称之为静态成员变量

  • static 修饰的成员函数,称之为静态成员函数

  • 静态成员变量一定要在类外进行初始化

下面一段代码证明 上述定义:

#include <iostream>

class MyClass {
public:
    static int staticMember; // 静态成员变量
    static void staticMethod() // 静态成员函数
    { 
        std::cout << "This is a static member function." << std::endl;
    }
};

int MyClass::staticMember = 0; // 在类外进行初始化

int main() {
    MyClass::staticMember = 10; // 修改静态成员变量的值
    std::cout << "The value of staticMember is: " << MyClass::staticMember << std::endl;
    MyClass::staticMethod(); // 调用静态成员函数
    return 0;
}

输出结果:

The value of staticMember is: 10
This is a static member function.

从代码可以看出,静态成员变量需要在类外进行初始化才能正常使用。静态成员函数可以通过类名直接调用,不需要实例化对象。


特性

  1. 静态成员 为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加 static 关键字,类中只是声明
  3. 类静态成员可用 类名::静态成员 或者 对象.静态成员 来访问。
  4. 静态成员函数 没有隐藏的this指针不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制。

问题

1. 静态成员函数可以调用非静态成员函数吗?

答:是的,静态成员函数可以调用非静态成员函数,但需要通过 对象实例或指针 来访问非静态成员函数。

代码举例:

#include <iostream>

class MyClass {
public:
    void nonStaticFunction() {
        std::cout << "This is a non-static member function." << std::endl;
    }

    static void staticFunction() {
        std::cout << "This is a static member function." << std::endl;

        // 调用非静态成员函数
        MyClass obj;
        obj.nonStaticFunction();
    }
};

int main() {
    MyClass::staticFunction(); // 调用静态成员函数
    return 0;
}

输出结果:

This is a static member function.
This is a non-static member function.

在静态成员函数 staticMethod() 中,我们实例化了一个对象 obj,然后通过该对象调用了非静态成员函数 nonStaticMethod() 。需要注意的是,静态成员函数无法直接访问非静态成员变量,因为非静态成员变量属于对象的状态,而静态成员函数没有隐式的对象实例。如果需要访问非静态成员变量,还是需要通过对象实例或指针来访问

2. 非静态成员函数可以调用类的静态成员函数吗

答: 是的,非静态成员函数可以调用类的静态成员函数。

代码举例:

#include <iostream>

class MyClass {
public:
    static void staticFunction() {
        std::cout << "This is a static member function." << std::endl;
    }

    void nonStaticFunction() {
        std::cout << "This is a non-static member function." << std::endl;

        // 调用静态成员函数
        staticFuntion();
    }
};

int main() {
    MyClass obj;
    obj.nonStaticFunction(); // 调用非静态成员函数
    return 0;
}

输出结果:文章来源地址https://www.toymoban.com/news/detail-628690.html

This is a non-static member function.
This is a static member function.

到了这里,关于【C++】static 关键字的特性 与 问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【学习笔记】C++ 中 static 关键字的作用

    在 C/C++ 中, static 在不同的应用场景下,有不同的作用,这里总结一下,避免在使用时弄混。 我按照以下的逻辑来分类 static 的作用场景 static 作用在变量上 static 作用在全局变量上:限制全局变量在本文件上 static 作用在局部变量上:即使离开变量作用域,也保存变量

    2024年02月09日
    浏览(41)
  • [开发语言][c++]:Static关键字和全局变量

    写在前面: 如果您只是想回顾或了解一下static和全局变量的异同点,那么下面的总结将满足您的需求。 如果您是一位初学者或对二者的使用模棱两可,建议您读完该篇文章,相信这一篇将解答完您对于static以及全局变量的所有疑惑。 如有问题或建议欢迎评论 or 私信

    2024年01月20日
    浏览(43)
  • 在C++和C中static关键字的用法,在C++和C中const关键字的用法

    1、在C++和C中static的用法 答:static表示存储类型,修饰数据类型。在C语言中,static修饰局部变量,内存分配在静态区,生命周期延长,作用域不变。static修饰全局变量,内存分配在静态区,作用域被局限于本文件,不能被extern引用。static修饰函数,不能被exter

    2024年02月10日
    浏览(31)
  • C++——初始化列表 | explicit关键字 | static成员

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 本章我们

    2023年04月11日
    浏览(40)
  • 重学C++系列之const与static关键字分析

            本篇幅讲解const与static,主要围绕在类的范围内叙述,包括作用和使用场景等。         1、const修饰的成员变量,成员变量初始化后不能再修改。         2、const修饰的成员函数,成员函数不可以修改成员变量,也不能间接修改。         3、static修饰的成员

    2024年02月15日
    浏览(38)
  • 【C++】const、static关键字和构造函数初始化

    💗个人主页💗 ⭐个人专栏——C++学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 1. const修饰成员函数 1.1 语法格式 1.2 权限放大缩小 1.3 思考 1.4 解答 2. 再谈构造函数 2.1 构造函数体赋值 2.2 初始化列表 2.3 explicit 3. static成员 3.1 静态变量 3.2 静态函数 3.3 静态成员变量

    2024年02月19日
    浏览(38)
  • 深入理解C++中的静态(Static)关键字及其应用场景

    在C++中,静态(Static)是一个常见且重要的概念,用于描述变量、函数和类成员。它具有独特的特性和作用域,可以在不同的应用场景中发挥重要作用。本文将详细讨论C++中的静态,包括静态变量、静态函数和静态类成员,并对其与全局变量之间的区别进行分析

    2024年02月09日
    浏览(34)
  • C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中, static 和 const 的有哪些用法? 二师兄: satic 主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静态局部变量,在第一次访问

    2024年02月08日
    浏览(37)
  • C++ 11 新特性 关键字

    我们先来看一段代码: 在这案例中,我们可以看到,声明为迭代器的变量前缀非常长,这样来写代码非常不美观,也不方便。auto的出现很大程度是为了解决该问题。 现在我们来回答刚才的问题: 在C++中, auto 是一个,它的作用是让编译器自动推导变量的类型,根据变

    2024年02月11日
    浏览(31)
  • 【C++初阶(三)】引用&内联函数&auto关键字

    目录  前言  1. 引用   1.1 引用的概念   1.2 引用的特性  1.3 引用的权限  1.4 引用的使用  1.5 引用与指针的区别 2. 内联函数 2.1  什么是内联函数 2.2  内联函数的特性  3. auto  3.1 auto简介  3.2 auto使用规则  3.3 auto不能使用的场景 4.  基于范围的for循环  4.1 范围for使用

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包