静态变量调用非静态函数的问题(不知道这种叫法对不对,欢迎大神围观)

CodingLife99 2018-06-22 11:17:01
以下是昨天遇到的一个程序的模拟版,现在的疑惑就是main.cpp中GetSBH()返回的是静态变量吗?换句话说,函数的返回值还有static属性吗?


//SBH.h
#pragma once
class SBH
{
public:
void S2B(int i);

SBH();
};


//ME.h
#pragma once
#include "SBH.h"

class ME
{
public:

static SBH * m_pSBH;
static SBH *GetSBH();

ME();
};



//ME.cpp
#include "ME.h"
#include "SBH.h"

SBH * ME::m_pSBH;

ME::ME()
{
m_pSBH = nullptr;
}


SBH *ME::GetSBH()
{
return m_pSBH;
}



//main.cpp
#include "ME.h"
#include "SBH.h"

void SBH::S2B(int i)
{
std::cout << "I am not Wrong!" << std::endl;
}

int main()
{
ME::GetSBH()->S2B(1); //此处GetSBH()返回的是静态变量吗?
return 0;
}

...全文
310 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
donjin9 2018-06-25
  • 打赏
  • 举报
回复
是说的不严谨了,抱歉。
CodingLife99 2018-06-24
  • 打赏
  • 举报
回复
引用 6 楼 paschen 的回复:
[quote=引用 5楼我是你的主体 的回复:][quote=引用 4 楼 paschen 的回复:]
static SBH *GetSBH() 这里的static修饰的是函数,表示是一个静态成员函数,而不是说返回值是一个静态变量

main函数中返回得到的是一个临时变量,只是这个临时变量与你类中静态变量的值是相同的,即按值返回

如果你要返回的是静态成员变量本身,要按引用返回


版主果然是版主,那#1和#3的论述岂不就完全不对了.[/quote]仔细体会下[/quote]

我看你的得分是80分,这是为什么呢?
paschen 版主 2018-06-23
  • 打赏
  • 举报
回复
引用 5楼我是你的主体 的回复:
[quote=引用 4 楼 paschen 的回复:]
static SBH *GetSBH() 这里的static修饰的是函数,表示是一个静态成员函数,而不是说返回值是一个静态变量

main函数中返回得到的是一个临时变量,只是这个临时变量与你类中静态变量的值是相同的,即按值返回

如果你要返回的是静态成员变量本身,要按引用返回


版主果然是版主,那#1和#3的论述岂不就完全不对了.[/quote]仔细体会下
donjin9 2018-06-22
  • 打赏
  • 举报
回复
是返回的静态指针变量啊,不过你这为NULL吧。
SBH * ME::m_pSBH;
CodingLife99 2018-06-22
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
static SBH *GetSBH() 这里的static修饰的是函数,表示是一个静态成员函数,而不是说返回值是一个静态变量

main函数中返回得到的是一个临时变量,只是这个临时变量与你类中静态变量的值是相同的,即按值返回

如果你要返回的是静态成员变量本身,要按引用返回


版主果然是版主,那#1和#3的论述岂不就完全不对了.
paschen 版主 2018-06-22
  • 打赏
  • 举报
回复
static SBH *GetSBH() 这里的static修饰的是函数,表示是一个静态成员函数,而不是说返回值是一个静态变量 main函数中返回得到的是一个临时变量,只是这个临时变量与你类中静态变量的值是相同的,即按值返回 如果你要返回的是静态成员变量本身,要按引用返回
donjin9 2018-06-22
  • 打赏
  • 举报
回复
class SBH
{
public:
void S2B(int i);
};
S2B函数里没用到this指针,所以没有报错。当成普通的函数调用。((SBH*)NULL)->S2B(1);
至于表不标准就不知道了。
CodingLife99 2018-06-22
  • 打赏
  • 举报
回复
引用 1 楼 donjin9 的回复:
是返回的静态指针变量啊,不过你这为NULL吧。
SBH * ME::m_pSBH;


静态对象可以调用非静态方法吗?不是说非静态成员函数只有在类对象建立以后才可以调用嘛?
内容概要:本文系统研究了虚拟同步发电机(VSG)的惯量-阻尼协同自适应并网控制策略及其稳定性分析,聚焦于提升高比例可再生能源接入背景下电网的频率稳定性。通过Simulink仿真平台与Matlab代码实现,构建了VSG并网系统的动态模型,深入探讨了惯量与阻尼参数的自适应调节机制,以优化系统对频率波动的响应能力。研究涵盖了双机并联VSG的功率精确分配、微电网黑启动过程、虚拟阻抗的引入以及预同步控制等关键技术,并结合根轨迹分析与调节系数对比,验证了所提控制策略在提升系统稳定性和动态性能方面的有效性。文章强调了协同自适应控制在现代电力系统中的关键作用,为微电网和分布式能源系统的稳定运行提供了理论支持和技术方案。; 适合人群:具备电力系统、自动控制或新能源并网等相关专业知识背景,熟悉Matlab/Simulink仿真工具,从事电力电子、微电网控制、可再生能源并网等领域科研或工程应用的研发人员及研究生。; 使用场景及目标:①掌握VSG在微电网及并网系统中的高精度建模与仿真方法;②深入理解惯量-阻尼协同自适应控制对电网频率稳定的优化机制;③应用于微电网黑启动、功率均分控制、虚拟阻抗设计及预同步等实际工程场景的算法开发与性能验证; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行同步仿真操作,重点关注参数自适应调节模块的设计逻辑、根轨迹稳定性分析及不同调节系数下的动态响应对比,以深化对控制策略内在机理的理解与实际应用能力。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧