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

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...public: static void fun() { cout 静态成员函数被调用 : number = " << number << endl; } }; 3、静态成员函数访问 静态成员函数访问...调用 静态成员函数 s.fun(); 4、静态成员函数只能访问静态成员 静态成员函数内容要求 : 静态成员函数 只能访问 静态成员变量 其他静态成员函数 静态成员函数 不能访问 非静态成员变量 或 非静态成员函数...调用 静态成员函数 s.fun(); 代码示例 : #include "iostream" using namespace std; class Student { public: // 带参构造函数...number = 1 执行 Student 的构造函数 s.number = 2 静态成员函数被调用 : number = 2 静态成员函数被调用 : number = 2 请按任意键继续. . .

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从Flutter范儿的单例来看Dart的构造函数

    ; } } 上面的代码与大部分编程语言的代码都差不多,不外乎就是单例的几个特点: 私有构造函数 静态instance访问 在Dart中,变量和函数前面加上「_」就代表私有,但这个私有实际上的含义是...「只能在当前文件中访问」,所以,如果在当前文件中,你依然是可以访问这个私有变量或者函数的。...私有构造函数 私有构造函数,除了我们前面提到的单例使用场景外,下面这个场景,也使用的很多。...._(); static void log(String message) => print(message); } 通过私有构造函数,我们可以避免使用者创建工具类的实例,而是让使用者直接调用静态函数...factory构造函数 factory constructor前面我们已经讲解过了,它可以从另一个构造函数,或者是其它类,返回一个唯一的实例。

    14610

    C++从静态类型到单例模式

    实现 C++并没有静态类和静态构造函数的概念。在参考文献1中,论述了一些用C++去实现静态构造函数,从而更加合理的去初始化静态数据成员的办法。...正是这个实现给了我灵感:我们想要的不是访问类的静态成员变量,而是单例模式。不想像C一样使用全局函数或者全局变量,又不想每次都去实例化一个对象,那么我们需要的是单例模式。...构造函数时私有的,所以无法直接声明和定义。 拷贝构造函数和赋值构造函数都被删除,因此无法进行拷贝和赋值。 只能通过专门的实例化函数get_instance()进行调用。...问题 无论从哪方面看,上述的单例实现,都符合单例的设计模式:全局只提供唯一一个类的实例,在任何位置都可以通过接口获取到那个唯一实例,无法拷贝也无法赋值。但是也有几个问题值得讨论。...参考 C++静态构造函数 解决静态全局变量初始化的相互依赖问题 C++ 单例模式总结与剖析 C++单例模式跨DLL是不是就是会出问题?

    1.1K40

    静态成员函数访问非静态数据成员【C++】

    初始化: 类型 类名 :: 静态数据成员 = 初始化值 ; 详解:静态数据成员必须在类外初始化,不可在类体内,因为:构造函数中,如果可以,则每次建立对象,都会对静态数据成员的值进行修改,这违背静态数据成员的使用目的...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问类的默认非静态成员(非静态成员函数和非静态数据成员)。...a) { //构造函数 x = a; y += x; } static void f1(Point m); //静态成员函数的原型声明...//静态成员函数的类外定义 参数表中创建对象 cout 静态成员函数通过对象访问非静态数据成员 cout 访问,则有两种方式,且一般使用第二种居多。 对象名 . 非静态成员 ; 类名 :: 非静态成员 ; 故:实例化对象即可完成对非静态数据成员的访问

    1.3K20

    C++ explicit禁止单参数构造函数隐式调用

    1.单参数构造函数隐式调用 C++中单参数构造函数是可以被隐式调用的,主要有两种情形会隐式调用单参数构造函数: (1)同类型对象的拷贝构造;即用相同类型的其它对象来初始化当前对象。...像A(1)这种涉及类型转换的单参数构造函数,又被称为转换构造函数(Converting Constructor)。..., MyInt objMyInt = 10; MyInt objMyInt1=objMyInt; 这种单参数构造函数被隐式调用在C++中是被默许的,但是这种写法很明显会影响代码的可读性,有时甚至会导致程序出现意外的错误...2.单参数构造函数隐式调用的危害 单参数构造函数隐式调用不仅仅会给代码可读性造成影响,有时会带来意外的结果。...3.explicit禁止单参数构造函数的隐式调用 在没有合适理由必须使用隐式转换的前提下,为了提高代码可读性以及避免单参数构造函数的隐式调用带来的潜在风险,建议使用explicit关键字阻止单参数构造函数的隐式调用

    4.7K60

    【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 ---- 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 ,...this->age; } 友元函数 ---- 外部访问类中的私有成员变量 , 有两种方法 , 一种是使用共有的成员方法访问 , 另一种是在友元函数中访问 ; 友元函数 , 在友元函数中 , 可以从类的外部访问类中的私有成员变量...① 私有静态单例类类型的静态成员变量 ; ② 私有构造函数 ; ③ 静态共有方法 , 该方法中调用私有构造方法创建唯一一个单例类对象 ; 单例类声明 , 创建 Instance 单例类 ; ① 声明一个私有的静态成员变量...Instance(); ; ③ 声明静态共有的方法 , 在该方法中调用私有构造函数创建单例对象 , public : static Instance* getInstance(); , 注意创建的这个单例对象是唯一的...静态成员变量赋值初始值 0 , 静态成员变量可以使用 类名::静态成员变量名 访问 ; 然后实现私有的构造函数 , 最后实现共有的单例类获取函数 , 在该函数中首先判定单例类对象是否已经创建 , 如果已经创建

    53120

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

    默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 class Date {}; 一、构造函数的概念 C++构造函数是一种特殊的成员函数,用于创建和初始化类的对象。...在C++中,构造函数在对象创建时自动调用,而析构函数则在对象被销毁时自动调用,它们共同组成了C++中的构造函数和析构函数机制,用于管理对象的生命周期。...Date d3(); } 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。...解答:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的数据类型,如:int/char......注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。

    17410

    C++笔记——类(0)定义、访问控制、友元、default、mutable、构造函数

    定义格式、访问控制 C++里面定义类的关键词有两个,一个是class,另一个是struct,他们基本没有区别,除了成员变量的默认属性。...,例如void xxx(); }; 在public修饰下的可以在整个程序内被访问,private只能够在类里面访问(上面的例子里private下只有成员变量,其实还可以有成员函数,如果是成员函数的话则只能被类里的其他成员函数调用...构造函数 其实默认情况下,如果你没有专门定义另外的构造函数的话,编译器会默认生成一个默认的构造函数给你定义的类,来初始化类里面的变量。...这个构造函数可以完全等同于之前我们提到的合成默认构造函数(即什么都不写的时候编译器自动加上的默认构造函数)。...参考 C++ 类的定义与实现 C++ 类 & 对象 C++类的介绍 《C++ Primer》

    50620

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

    拷贝构造函数 前言 一、拷贝构造函数概念 理解 定义 二、拷贝构造函数的特征 三、注意要点 写法 实践 前言 类的6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?...C++拷贝构造函数是一种特殊的构造函数,用于创建对象时,使用一个已有对象的内容来初始化新的对象。它接受一个同类对象作为参数,并按照该对象的数据成员的值来创建新的对象。...拷贝构造函数通常用于以下情况: 在创建对象时,使用同类已有对象的值来初始化新对象。 以值传递方式将对象传递给函数。 以值返回方式从函数返回对象。...如果没有显式定义拷贝构造函数,编译器会提供一个默认的拷贝构造函数。默认的拷贝构造函数执行的是浅拷贝,即简单地将原对象的值复制给新对象的数据成员。...拷贝构造函数是通过对象名来调用的,而不是通过函数名来调用。 二、拷贝构造函数的特征 拷贝构造函数也是特殊的成员函数,其特征如下: 拷贝构造函数是构造函数的一个重载形式。

    33010

    scala 学习笔记(04) OOP(上)主从构造器私有属性伴生对象(单例静态类)apply方法嵌套类

    一、主从构造器 java中构造函数没有主、从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person {...} }  注意:isOlder方法,该方法用于比较二个Person谁更年长,跟java不同的是,在Class定义范围内,可以直接访问另一个类实例的私有成员!..._age > another.age } 这样的话,isOlder中的another,只能通过函数age来访问私有成员_age了。...var obj2 = Singleton.count println(obj2) object不仅仅用于单例模式的实现,更多时候,我们可以定义一个与class同名的object,然后把...从object的使用上,还可以看出静态方法的调用上scala与java的不同,java中静态方法即可以用"类名.静态方法()",也可以用"对象实例.静态方法()"来调用,说实话,有点不太讲究,而Scala

    92680

    【EventBus】EventBus 源码解析 ( EventBus 构建 | EventBus 单例获取 | EventBus 构造函数 | EventBus 构建者 )

    文章目录 一、EventBus 单例获取 二、EventBus 构造函数 三、EventBus 构建者 一、EventBus 单例获取 ---- 在 EventBus 中 , 不论是进行注册 , 取消注册..., 还是发送信息 , 都需要调用 EventBus.getDefault() , 获取一个 EventBus 的实例对象 , 这个实例对象是 单例对象 ; 在 EventBus.getDefault(...new EventBus(); } } } return instance; } } 二、EventBus 构造函数...---- 在 EventBus.getDefault() 方法中 , 调用了 new EventBus() 方法创建了 EventBus 实例对象 , 在构造函数中 , 又调用了 EventBus(EventBusBuilder...builder) 构造函数 , 传入默认的 构建者 EventBusBuilder 实例对象 ; 在 EventBus(EventBusBuilder builder) 构造函数中 , 初始化了一堆数据

    71010

    【C++进阶学习】第十四弹——特殊类设计——探寻各种情况下类的应用

    只在栈上创建对象 设计策略:通过私有构造函数和公共静态工厂方法来实现。 实现步骤: 私有构造函数:将构造函数声明为私有,禁止外部直接调用。...使用 private 访问控制 将一个类声明为私有(private)可以防止外部代码创建该类的实例,但并不能阻止继承。为了防止继承,可以将基类的构造函数和析构函数设置为私有。...在实际应用中我们可以通过场景和设计要求来选择最合适的方法 三、特殊类:单例模式 单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。...单例模式概述 单例模式的主要目的是控制一个类的实例化过程,确保在任何时候,只有一个实例被创建,并且全局所有的地方都可以通过同一个引用访问这个实例。 2....Singleton::instance; // 静态成员变量的初始化 在这个例子中,Singleton 类的构造函数是私有的,外部无法直接创建其实例。

    11810

    【C++高阶】解锁C++的深层魅力——探索特殊类的奥秘

    防止别人调用拷贝在栈上生成对象 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建 方案一:析构函数私有化: 正常创建对象,会自动调用析构函数,将析构函数私有化,外部代码将无法直接调用delete...: 通过将构造函数私有化,我们可以限制对象创建的方式,从而实现只能在堆上创建对象 代码示例 (C++): class HeapOnly { public: // 静态的成员函数,完成完成堆对象的创建...只能在栈上创建对象 实现方式: 将类的构造函数私有,提供一个静态的成员函数,在该静态成员函数中完成栈对象的创建 思考一下:这里的实现方法和上面似乎有点相同,但是我们在实现时,是否也要像上面一样delete...不能被继承的类 实现方式: C++98:中构造函数私有化,派生类中调不到基类的构造函数就无法继承 C++11:一个类如果不希望被其他类继承,可以通过将其声明为final类来实现 代码示例 (...在实际开发中,可以根据具体的需求和场景选择合适的设计模式来解决问题 ⭐单例模式 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享

    8510

    C++实现不能被继承的类——终结类

    解决方法 基本思路:由于任何派生类的对象在创建的时候,都必需在派生类的构造函数中调用父类的构造函数。所以,只要类的构造函数在子类中无法被访问,那么就阻止了该类被继承,实现终结类。...如果将一个类的构造函数声明为私有(private),可以阻止该类进一步派生,但是该类也无法直接实例化了,此方法行不通。注意,构造函数为private的类,无法直接实例化,但是可以被间接实例化。...联想到C++的单例模式singleton,也是用到了这个方法,C++的单例模式的实现见如下代码: class CSingleton { private: CSingleton(){}...一个基类如果被虚拟继承,那么在创建它的孙子类的对象时,该基类的构造函数需要单独被调用。此时,如果该基类的构造函数在孙子类的构造函数中无法访问,那么就实现了基类的子类不能被继承。...FinalParent的构造函数,而FinalParent的构造函数在FinalClass中已经变成了私有private,不能被FinalClassChild的任何成员函数所访问,导致编译错误。

    1.8K30

    C++终结类

    由于任何派生类的对象在创建的时候,都必需在派生类的构造函数中调用父类的构造函数。所以,只要类的构造函数在子类中无法被访问,那么就阻止了该类被继承,实现终结类。...如果将一个类的构造函数声明为私有(private),可以阻止该类进一步派生,但是该类也无法直接实例化了,此方法行不通。注意,构造函数为private的类,无法直接实例化,但是可以被间接实例化。...联想到C++的单例模式Singleton,也是用到了这个方法,C++的单例模式的实现见如下代码: class CSingleton { private: CSingleton(){}...一个基类如果被虚拟继承,那么在创建它的孙子类的对象时,该基类的构造函数需要单独被调用。此时,如果该基类的构造函数在孙子类的构造函数中无法访问,那么就实现了基类的子类不能被继承。...FinalParent的构造函数,而FinalParent的构造函数在FinalClass中已经变成了私有private,不能被FinalClassChild的任何成员函数所访问,导致编译错误。

    52020

    【C++】特殊类设计和C++的类型转换

    C++98 将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。...只能在堆上创建对象的类 实现方式: 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。...如下图: 注意,还需要把拷贝构造和赋值重载封死。 只能在栈上创建对象的类 同上将构造函数私有化,然后设计静态方法创建对象返回即可。...不能被继承的类 C++98中构造函数私有化,派生类中调不到基类的构造函数。则无法继承 C++11方法:f inal关键字,final修饰类,表示该类不能被继承。...GetInstance() { // C++11之前,多线程调用GetInstance // 局部静态单例对象构造初始化,无法保证线程安全 // 也就是说,这种写法C++11之后才能用

    9710

    【C++高阶】:特殊类设计和四种类型转换

    1.1.1 C++98的做法: 将拷贝构造函数与赋值运算符重载只声明不定义。(防自己) 并且将其访问权限设置为私有即可。(防外面) class CopyBan { // ......将类的构造函数私有,拷贝构造声明成私有(可以直接delete掉)。防止别人调用拷贝在栈上生成对象。 注意:拷贝构造可以直接delete掉,但是构造函数不行!!...= new StackOnly(move(s4)); return 0; } 1.4 无法被继承的类 1.4.1 C++98的做法: 构造函数私有化,这样子类调用不到父类的构造函数,无法实现继承 /.../ C++98中构造函数私有化,派生类中调不到基类的构造函数。...1.5.2 单例模式: ☘️☘️一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

    9410

    【C++】设计模式详解:单例模式

    请设计一个类,只能在堆上创建对象 实现方式: 将类的构造函数私有化,并将拷贝构造的声明也私有化,防止别人调用拷贝在栈上生成对象。...请设计一个类,只能在栈上创建对象 方法一:同上面那种情况一样,将构造函数私有化,然后设计静态方法创建对象返回即可。...我们之前在学习 C++ 的过程中其实早就接触到了设计模式,比如迭代器模式、适配器模式等等,下面我们就来讲一下单例模式: 单例模式: ​ 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例...(可参考 Effective C++) 实现方式: ​ 首先既然是单例模式,那么我们肯定要保证全局只能产生一个对象,那么我们想到的就是用静态变量,所以我们在 Singleton 类中定义一个静态变量 single_object...,并且用一个静态成员函数 CreateObject() 返回该对象,而这个对象就是这个单例对象。 ​

    14510
    领券