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

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

调用 静态成员函数 s.fun(); 4、静态成员函数只能访问静态成员 静态成员函数内容要求 : 静态成员函数 只能访问 静态成员变量 其他静态成员函数 静态成员函数 不能访问 静态成员变量 或 静态成员函数..., 普通 成员变量 和 成员函数 , 需要 通过 类 实例对象 来访问 , 需要 依托于 对象才能存在 , 而 静态成员函数 可以在 不创建 实例对象前提下被调用 , 因此 静态成员函数中 不能访问...进行 ; 在 Student 类中定义静态成员函数 , 使用 static 关键字修饰函数 ; 注意 : 不要在 静态函数访问 静态成员 , 否则会报错 " 对静态成员“Student::m_age...”非法引用 " ; static void fun() { // 静态成员函数访问静态成员会报错 // error C2597: 对静态成员“Student::m_age”非法引用...中 访问静态成员会报错 // error C2597: 对静态成员“Student::m_age”非法引用 //m_age = 10; cout << "静态成员函数被调用 : number

26920

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

,为了能处理静态数据成员静态成员函数不能默认引用本类静态数据成员原因: 当调用一个对象静态成员函数时,系统会将该对象起始地址赋予成员函数this指针。...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问默认静态成员静态成员函数静态数据成员)。...//静态成员函数类外定义 参数表中创建对象 cout << "x=" << m.x << endl; //<em>静态</em><em>成员</em><em>函数</em>通过对象<em>访问</em><em>非</em><em>静态</em>数据<em>成员</em> cout << "y=" <...只要对<em>静态</em>数据<em>成员</em><em>的</em>值更新一次,就可以保证所有对象都会存取更新后<em>的</em>值 由本例可知:<em>静态</em><em>成员</em><em>函数</em>不能引用本类<em>非</em><em>静态</em><em>成员</em>并非绝对,只是不可以进行默认<em>的</em><em>访问</em>,因为编译器不知道应该去寻找哪一个对象。...若必须要<em>访问</em>,则有两种方式,且一般使用第二种居多。 对象名 . <em>非</em><em>静态</em><em>成员</em> ; 类名 :: <em>非</em><em>静态</em><em>成员</em> ; 故:实例化对象即可完成对<em>非</em><em>静态</em>数据<em>成员</em><em>的</em><em>访问</em>

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

静态成员函数静态成员函数区别?

一个静态成员函数不与任何对象相联系,故不能对静态成员进行默认访问。 它们根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()调用,编译像注解那样进行转换,s地址作为第一个传递参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对静态成员访问将自动把this参数作为指向当前对象指针。而当Sc::sfn()被调用时,没有任何对象地址被传递。因此,当访问静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系原因。

1.7K90

C++类静态数据成员静态成员函数

在类定义时候静态数据成员是不分配内存,只有在创建类对象时候才分配内存,但静态数据成员是要分配内存,因为它是属于类,只有一块内存,所以要初始化它,而且不能在类声明中初始化,必须要在类外初始化...静态数据成员访问受类访问权限控制。如果定义为私有,则可以在类内访问到。...静态成员函数 一般都是在静态成员函数中修改静态数据成员,在刚刚手机类声明中成员函数: static void change(); 就是静态成员函数。...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意是,静态成员函数只能访问静态数据成员静态成员函数,不能访问静态数据成员,如果要访问静态数据成员...但是非静态成员函数可以任意地访问静态成员函数静态数据成员。 那静态成员函数存在意义是什么?

14730

2021-04-14 quickjs调用类静态成员函数

有这样一个需求:多线程条件下执行交易,每个交易都会通过quickjs回调c++代码函数,而这个函数使用数据又来自于当前交易 首先不考虑用全局变量来保存交易数据,因为js回调c函数时候我们无法在回调函数中区分当前属于哪个交易...,如果你总是把交易id通过回调函数传递过来也是可以实现,只是这样函数就多了个参数,写js代码的人无法理解。...一个简单思路是c代码创建交易类,然后把类函数传递给quickjs,然后在js中调用这个类函数,但是这个实现不了,因为quickjs没有注入静态成员函数接口,其原因文章static成员函数通过类名...::来调用,空指针调用成员方法不出错!...讲解比较清楚 换个思路,我们先用js创建这个类,然后调用eval把类数据传递给它,这样调用这个类静态成员函数时候就可以正确访问到数据了,我们直接修改文件example.cpp 具体实现如下

92320

静态变量 静态对象 静态函数静态函数区别。(我理解,大家看看对不对)

} } 调用 aa.test("123"); 4、静态函数(就是需要实例化) class aa {     public string test(string str)     {        ...争论最大静态函数这一块。 1、静态变量。在内存里是应该只有一份,不管是不是多线程,是不是多用户同时访问静态变量只占用一份内存。 2、静态对象和静态变量也差不多,只有一份。...3、静态函数,就是在调用时候必须先实例化,然后才能访问到。 实例化到底做了什么呢?是不是把整个类都“复制”了一份供调用者使用呢?...类属性、函数参数、返回值,这些应该是在实例化时候产生一份,供调用者单独使用,其他调用者是绝对访问不了。 那么函数(或者说是类)呢?也又生成了一份吗?还没有弄清楚。...当然函数内定义变量、对象也应该是独立(多份),有一个调用就产生一份。 小结 静态函数静态函数最大区别是,静态不能访问所在类属性和内私有变量,其他好像都一样了。

1.8K50

C++类this指针,静态成员,友元函数友元类

在 C++ 中,每一个对象都能通过 this 指针来访问自己地址,this 指针是所有成员函数隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针在成员函数开始执行前构造...,在静态函数里面,不可以直接访问静态成员。...静态数据成员和普通数据成员一样遵从public,protected,private访问规则。 相对于类成员,必须在构造对象以后才会分配内存空间,只能通过对象名访问。...友元函数友元类 所谓友元函数,就是在类中,用friend关键字声明一个函数,这个函数声明在类中,但不作为类成员函数,虽然友元函数不属于成员函数,却可以访问类中成员,不论成员是public,pirvate...因为是需要友元来共享数据,那么大多数情况,友元函数都是有参数, 因为友元函数没有this指针,则参数要有三种情况: 要访问static成员时,需要对象做参数; 要访问static成员或全局变量时

1.4K10

【C++】static关键字及其修饰静态成员变量函数详解

static成员概念 声明为static成员称为类静态成员,用static修饰成员变量,称之为静态成员变量;用static修饰成员函数,称之为静态成员函数。...静态成员变量和类对象和其成员变量关系如下图: 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明 类静态成员即可用 类名::静态成员 或者 对象.静态成员访问 静态成员函数没有隐藏...this指针,不能访问任何静态成员;但静态成员可以访问静态成员函数 静态成员也是类成员,受public、protected、private 访问限定符限制 ststic成员应用 利用static.../销毁数记录工作,可以从下面三个方向入手: 类对象创建数=构造函数静态成员变量++ 类对象销毁数=析构函数静态成员变量++ 类对象在生命周期数=构造函数静态成员变量-析构函数静态成员变量 设计一个类...,如: 2.使用成员函数来创建类对象是因为成员函数调用类函数不受访问限定符限制,如: 3.使用static修饰成员函数是因为要解决无类对象就无法调用类成员函数问题,如: 做个梗图给大家形象理解一下这里矛盾逻辑

23710

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B静态代码块、子类A构造函数、子类A静态代码块、子类A静态代码块 执行先后顺序是?

(1)子类A继承父类B, A a = new A(); 则: 父类B静态代码块->子类A静态代码块->父类B静态代码块->父类B构造函数->子类A静态代码块->子类A构造函数 (2)若子类构造函数中显式调用了父类某构造函数...,则调用该构造函数 class C { C() { System.out.print("C"); } } class A { C c = new C();...执行父类带参构造前要先对父类中对象进行初始化,对父类中c成员进行初始化,调用了C类无参构造,所以调用顺序为: 先调用C类无参构造 再调用A类带参构造 最后调用调用子类构造 (3...)在JVM调用mian方法之前先用进行静态内容初始化。...顺序为:父类静态变量, 父类静态代码块 ,子类静态变量,子类静态代码块。

2.1K30

【面试题】Java中子类和父类静态代码块、静态代码块、构造函数执行顺序总结一览表

在面试时候,有时候我们会被问到这样问题:子类A继承父类B,A a = new A();则父类B构造函数、父类B静态代码块、父类B静态代码块、子类A构造函数、子类A静态代码块、子类A静态代码块执行先后顺序是什么...静态代码块也可以叫作:静态初始化代码块运行时机:会在构造函数执行时候,在构造函数代码执行之前被运行三:构造函数构造函数或者构造方法不用多说了吧,就是用来创建对象。...我们来看下父类B编译成class文件时候,静态代码块和构造函数相关代码如下:从代码中,我们可以看出静态代码块执行顺序优先于构造函数。...如下图:2:父类和子类中静态代码块、静态代码块、构造函数执行顺序:父类中静态代码块→子类中静态代码块→父类静态代码块→父类构造函数→子类静态代码块→子类构造函数具体加载如下图:所以,根据上面的分析...父类B静态代码块 sya() 父类B构造函数 子类A静态代码块 sya()1 子类A构造函数 启动完成总之一句话总结:父类早于子类、静态早于静态静态早于构造函数

53250

C++ Qt常用面试题整理(不定时更新)

大家好,又见面了,我是你们朋友全栈君。 1.基础知识 1.Qt信号槽机制优势和不足 优点:类型安全,松散耦合。缺点:同回调函数相比,运行速度较慢。...2.static和const使用 1.static:静态变量声明,分为局部静态变量,全局静态变量,类静态成员变量。也可修饰类成员函数。...类静态成员变量:被类所有对象共享,包括子对象。必须在类外初始化,不可以在构造函数内进行初始化。 类静态成员函数:所有对象共享该函数,不含this指针,不可使用类中非静态成员。...4.如何理解多态 定义:同一操作作用于不同对象,产生不同执行结果。C++多态意味着当调用虚成员函数时,会根据调用类型对象实际类型执行不同操作。...在socket编程中,这一过程由客户端或服务端任一方执行close来触发,流程如下: 2.Qt多线程同步几种实现方式 (1)互斥量:QMutex QMutex类提供是线程之间访问顺序化。

2K10

C++复习篇

种转换 9.拷贝构造函数 10.构造函数初始化列表 11.析构函数 12.const成员函数 13.const对象 14.栈、堆、静态存储区区别 15.静态成员变量/静态成员函数 16.友元friend...25.泛型函数模板(兼容不同类型) 26.泛型类模板(兼容不同类型) 27.数值型函数模板和数值型类模板(兼容不同数值) 28.C++智能指针 29.Qt智能指针 1.const const和define...对于public公有的静态成员变量/函数时,可以直接通过类名进行直接访问 静态成员函数中不能访问静态成员变量,因为它属于整个类,没有隐含this指针 示例如下: class Test{ private...int main() {   Test::print(); //通过类名直接访问静态成员函数,打印: mval=4 } 16.友元friend 友元好处在于,方便快捷.可以通过friend函数访问这个类私有成员...,只需要重写它即可,而QT库只需要根据vertual特性来自动调用我们重写函数,非常灵活. 25.泛型函数模板(兼容不同类型) 函数模板是C++中重要代码复用方式, 可通过不同类型进行调用 通过template

1.3K20

02 qt基本控件及信号和槽

qlonglong , int ) : QString number(qulonglong , int ) : QString number(double , char , int ) : QString 该函数都是一个静态成员并且重载函数...float toInt(bool *, int ) const : int int QString::toInt(bool *ok = nullptr, int base = 10) const 该函数为普通成员函数...string之间转换 将string -----> QString [static] QString QString::fromStdString(const std::string &str) – 静态成员函数...fillChar = QLatin1Char(' ')) const ------ 普通成员函数,要使用对象来调用 功能:当程序运行时,可以实现对一个参数设置 参数说明: 参数一:int a -...3.2 界面跳转携带数据 ---- 信号和槽(signal and slot) 在qt中,因为不同界面,本质上就是不同对象,说到底还是不同类之间数据传输, 使用信号和槽来实现(Signals

14820

QtQt线程(两种QThread类详细使用方式)「建议收藏」

MyThread使用成员函数run()才会实现线程。...满足下列条件函数多数是不可重入函数体内使用了静态数据结构和全局变量,若必须访问全局变量,利用互斥信号量来保护全局变量;; 函数体内调用了malloc()或者free()函数函数体内调用了标准...QThread提供在程序中可以控制和管理线程多种成员函数和信号/槽。通过QThread类成员函数start()启动线程。...总之,只有在绝对必要时使用此函数。 void requestInterruption() 请求线程中断。该请求是咨询意见并且取决于线程上运行代码,来决定是否及如何执行这样请求。...//此函数可用于使长时间运行任务干净地中断。从不检查或作用于该函数返回值是安全,但是建议在长时间运行函数中经常这样做。注意:不要过于频繁调用,以保持较低开销。

2.4K20

07 线程学习

qt线程角色 子线程完成与UI线程无关工作,并且能够保持与UI线程通信 二 qt中线程 在QT中,对于 线程操作也是提供类(QThread)来进行封装,然后再学习该类API接口 参数 用途 Header...在创建线程后,要进行启动线程 操作 class WorkerThread : public QThread { void run() override { //该函数是一个普通成员函数...退出一个线程循环,可以起作 停止线程 void start(QThread::Priority priority = InheritPriority)//启动线程 void terminate()//终止线程 静态成员函数接口...Qt::HANDLE currentThreadId()//返回ID值给是QT内部使用,应用程序不能使用 来自于QObject类中成员函数:设置和获取线程名字 参数 用途 void setObjectName...在多线程中,每次只允许一个线程来进行访问 在线程同步中,把要保护数据或者代码段上下文叫作临界区 临界区中所包含资源就是临界资源,比如:变量 寄存器 static int number = 0;

13720

04 qt功能类、对话框类和文件操作

QT中时间和日期 时间 ---- QTime 日期 ---- QDate 对于Qt而言,在实际开发过程中, 1)开发者可能知道所要使用类 ---- >帮助手册 —>索引 -->直接输入类名进行查找...创建时间对象方式有两种:构造函数----- 指定一个时间 通过静态成员函数—currentTime() — 获得当前操作系统本地时间 功能: 1)直接获取操作系统时间 [static]...(int y, int m, int d) 2)静态函数:currentDate() 功能接口函数: QString QDate::toString(const QString &format)...—颜色对话框 该类主要来获得一个颜色(The QColorDialog class provides a dialog widget for specifying colors) 通过该类静态成员函数...class provides a dialog that allow users to select files or directories) 头文件:#include 静态函数原型

16410

OpenCV3 和 Qt5 计算机视觉:11~12

我们将讨论它们之间差异以及它们如何影响部署,以及如何在 Windows,MacOS 和 Linux 操作系统上动态或静态地构建 Qt 和 OpenCV 库。...我们将学习如何使用 Qt 功能和 QML 简单性来创建漂亮 UI。...通过研究一些最重要 QML 库,我们将了解现有的可视和可视 QML 类型,这些类型可用于创建用户界面,向其中添加动画,访问硬件等。...幸运是,QML 和 Qt 框架提供了足够规定以能够轻松地处理此问题。 在本节中,我们将学习如何创建一个可视 C++ 类,该类可以在 QML 代码内使用 OpenCV 处理图像。...我们学习了如何填补 QML 和 C++ 代码之间空白,然后建立了可视类和可视类来处理和显示使用 OpenCV 处理图像。

6.2K20

C++对象模型和this指针实例分析(一)

C++对象模型和this指针 成员变量和成员函数分开存储 在C++中,类内成员变量和成员函数分开存储 只有静态成员变量才属于类对象上 class Person { public: Person...),但是类里有了静态成员变量后就占变量所对应字节。...this指针概念 通过4.3.1我们知道在C++中成员变量和成员函数是分开存储 每一个静态成员函数只会诞生一份函数实例,也就是说多个同类对象会共用一块代码 那么问题是:这一块代码是如何区分那个对象调用自己呢...this指针指向 被调用成员函数 所属对象 this指针是隐含每一个静态成员函数一种指针 this指针不需要定义,直接使用即可 this指针用途: 1.解决名称冲突:当形参和成员变量同名时...,可用this指针来区分 2.在类静态成员函数中返回对象本身,可使用return *this 1.e.g.注意以下代码:传入形参并不会给成员属性age赋值!

25820

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券