为什么C++静态成员函数不能访问非静态成员变量、不能调用非静态成员函数?(面试常考)

C++面试常考知识点汇总 C++知识点汇总 1.面向对象 C++是面向对象的编程语言。面向对象的程序设计开发时间短,效率高, 可靠性高。面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。 面向对象的基本概念:类、对象和继承。所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。 面向对象的基本... 阅读详情

        先来看一个简单的程序:

 

#include <iostream>
using namespace std;

class A
{
public:
	int x;

	void print()
	{
		cout << this << endl;
	}
};

int main()
{
	A a;
	cout << &a << endl; // 	0013FF7C
	a.print();          //  0013FF7C

	A aa;
	cout << &aa << endl; // 0013FF78
	aa.print();          // 0013FF78

	return 0;
}


      再看看看:

 

 

#include <iostream>
using namespace std;

class A
{
public:
	int x;

	void static print()
	{
		cout << this << endl; // static成员函数没有this指针
	}
};

int main()
{
	A a;
	cout << &a << endl;

	return 0;
}

      static函数没有this指针, 故不能访问类的非静态成员变量, 不能调用非静态的成员函数。且看:

 

 

#include <iostream>
using namespace std;

class A
{
public:
	int x;

	void static print()
	{
		cout << x << endl; // 没有this, 所以不知道x是啥
	}
};

int main()
{
	return 0;
}

 

#include <iostream>
using namespace std;

class A
{
public:
	int x;

	void test()
	{
	
	}

	void static print()
	{
		test(); // 没有this, 所以不知道test是啥
	}
};

int main()
{
	return 0;
}

 

 

 

 

 

 

 

C\C++面试重点大集合(一) 春招的时候,我自己整理了一份C++面试重点,面试了七八家,发现基本没有超出这个范围的,可以说,背下本文的重点,对于想找一份C++开发工作的小伙伴来说,已经成功了一半。 本文除了帮助作者找到了大厂工作,还帮助我周围很多小伙伴拿下了心仪的offer,可以说目标不是大厂的小伙伴,只要把这些掌握了,拿一个二三线城市10k+,一线城市15k+的工作是没问题的。 本文篇幅较长,内容较长但都是精华,建议有需要的小伙伴收藏熟记! 本文针对于需求C++开发工作的小伙伴,整理了C++相关重点,本系列将持续更新,喜欢的小伙伴希 阅读详情

相关推荐

C++静态成员

 类中的静态成员真是个让人爱恨交加的特性。我曾经在面试时,被主考官抓住这个问题一阵穷追猛打,直把我问的面红耳赤,败下阵来。所以回来之后,我痛定思痛,决定好好总结一下态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 态类成员包括态数据成员和函数成员两部分。 一 态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的态数据

xzdwfwt111的专栏 1308

C++静态成员函数不能调用静态成员变量(详解)

下面小编就为大家带来一篇C++静态成员函数不能调用静态成员变量(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

C++基础】静态成员变量函数:类级共享的实现细节(面试高频考点 + 真题解析)

面试中,静态成员变量函数是面向对象编程的核心考点之一。本文将通过基础概念→高频考点→真题解析→进阶设计的递进结构,结合真实面试题,助你全面掌握该知识点。

byte轻骑兵的技术小窝 1760

C++静态成员函数不能调用静态成员变量

C++静态成员函数不能调用静态成员变量静态成员函数this指针C++静态成员函数不能调用静态成员变量原因为什么要引入static什么时候用static致谢 静态成员函数 定义:静态成员函数就是在声明时前面加了 static 关键字的成员函数。   其实我们从直观上可以很好的理解静态成员函数不能调用静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份。然而静态成员变量静态成员函数是针对类的对象而言。   然而从本质上来说类的

qq_43899283的博客 5867

C++陷阱之三(静态成员函数 不能访问 静态成员变量)

C++陷阱之三(静态成员函数 不能访问 静态成员变量)

qq_61139924的博客 473

C++静态成员函数的错误调用

问题排查: 一、静态成员函数调用 用户代码通过静态成员函数的类对象进行调用。 用户代码通过类名类作用域运算符进行调用。 二、静态成员函数没有this指针 因为没有this指针,所以静态成员函数内部不能调用类的的静态成员,否则会报以上错误。 解决方法: 对问题一,修改为正确的调用。 对问题二,将要调用静态成员改为静态成员。注意,修改为静态成员函数的内部也不应该使用类的静态成员

m0_62616382的博客 1175

c++类中函数不能调用类中的函数原因

程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。  类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问静态成员变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。    在一个类的静态成员中去访问静态成员之所以会出错是因为在类的静态成员不存在的时候类的静态成员

shejiannan的专栏 5361

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

本文将会循序渐进,先从C语言的static讲起,慢慢延申到C++,从易到难,每一步都会举一些通俗易懂的例子帮助大家理解(帮助自己理解,怕忘记😂),好了开始整活!

weixin_45031801的博客 18万+

C/C++面试常考知识点

C/C++基础部分 C++和C的区别 设计思想上: C++是面向对象的语言,而C是面向过程的结构化编程语言。 语法上: C++具有封装、继承和多态三种特性; C++相比C,增加多许多类型安全的功能,比如强制类型转换、 C++支持范编程,比如模板类、函数模板等。 C++中static关键字的作用 全局变量 在全局变量前加上关键字static,全局变量就定义成一个全局变量态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局变量会被自动初始化为0(自动对象的值是任意的,除他被显

Ternence_zq的博客 7150

C++面试题:静态成员函数不能被继承?

函数表保存着类的虚函数地址,程序运行时,基类或派生类的指针或引用会根据对象的实际类型(而不是声明的类型)来调用对应的虚函数版本。静态成员函数对比普通函数有点特殊,静态成员函数是属于类本身的,而不是类的对象。所以静态成员函数不参与多态:静态成员函数调用是通过类本身而不是通过对象进行的,因此不涉及动态绑定。因为静态成员函数和类的实例无关,它们是与类本身绑定的,而不是和对象的状态绑定。静态成员函数可以被继承:派生类可以继承基类的静态成员函数,但函数本身与对象无关,不能在派生类中重写。

CppPlayer 950

C++面试必问】static静态成员

文章目录一、静态成员二、静态成员变量三、静态成员函数四、访问静态成员的方五、小结 一、静态成员 即在定义前面加上static关键字的成员。 #include<iostream> using namespace std; class A{ public: A(int a, int b): m_a(a), m_b(b){ num += m_a + m_b; } ~A(){} void Fun(); // 不同成员函数 static void PrintNum(){ //

发现问题,并解决问题,批判性思维 1294

函数只能调用变量

有次面试的时候被問到,说为什么函数只能调用变量,我一下懞了,平时只知道这样記着,所以也只能老实回答。面试完后补习了下这块的知识。 推荐一篇很好的文章,关于C++中的this指针的:http://blog.csdn.net/starlee/article/details/2062586 首先得知道为什么要使用态数据成员:     在类中,静态成员可以实现多个对象之...

abbott715的博客 3139

C++中的静态成员(面试经典常考)

静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: 静态成员变量 所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化 静态成员函数 所有对象共享同一个函数 静态成员函数只能访问静态成员变量 **示例1 :**静态成员变量 class Person { public: static int m_A; //静态成员变量 //静态成员变量特点: //1 在编译阶段分配内存 //2 类内声明,类外初始化 //3 所有对象共

理想三旬 187

关于函数只能调用变量

有次面试的时候被問到,说为什么函数只能调用变量,我一下懞了,平时只知道这样記着,所以也只能老实回答。面试完后补习了下这块的知识。 推荐一篇很好的文章,关于C++中的this指针的:http://blog.csdn.net/starlee/article/details/2062586 首先得知道为什么要使用态数据成员:     在类中,静态成员可以实现多个对象之间的数据

o7_yue的专栏 4652

C++面试题-面向对象-静态成员变量以及静态成员函数

C++面试题-面向对象-静态成员变量以及静态成员函数 问:在类中,态数据成员和普通数据成员有何区别? 答: 普通数据成员属于类的对象,对象被创建后,普通数据成员才会分配内存。态数据成员属于整个类,即使没有创建对象,它也存在; 只能在类外进行初始化,默认初始化为0; 可以使用类的对象,引用或指针访问态数据成员; 类的任何成员函数都可以访问类的态数据成员; 和普通成员一样,都可以...

《好好先生》专栏 477

c++中的静态成员静态成员

C++中类的成员分为静态成员静态成员,二者在内存分配、生命周期、访问等方面存在显著差异。静态成员属于类本身,程序启动时分配在全局区,所有对象共享一份;静态成员属于具体对象,创建对象时分配。静态成员通过类名访问,生命周期与程序相同;静态成员通过对象访问,生命周期与对象相同。静态成员不占用对象大小,需在类外初始化(C++17后可用inline static类内初始化)。静态成员常用于共享数据、计数器等场景,而静态成员用于对象特有属性。函数不能访问静态成员,但普通函数访问静态成员

likuoelie的博客 619
上一篇: 如何在程序中加载各个模块(也谈C++多态的威力)
下一篇: 形象地聊聊C++中的浅拷贝与深拷贝
涛歌依旧
涛歌依旧 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄14年 28万+粉丝 2592原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值