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

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;
}

...全文
243 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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;


静态对象可以调用非静态方法吗?不是说非静态成员函数只有在类对象建立以后才可以调用嘛?

65,187

社区成员

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

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