【C++】静态成员函数

【C++】 静态成员函数

文章目录

  • 【C++】 静态成员函数
    • I - 静态成员函数概述
    • II - 静态函数不可以声明为虚函数
    • III - 静态成员函数不包含 this 指针
    • IV - 静态成员函数不可以声明为 const
    • V - static 关键字不构成重载

I - 静态成员函数概述


类中的成员函数,若未使用类中的成员变量,则可声明为静态成员函数,函数声明前加上 static 关键字。

静态成员函数不属于对象,属于类。

静态成员函数与成员函数用法上的主要不同为:
调用静态成员函数时,不需要实例化一个对象。只需要使用 类名 + 命名空间标识符 (::) 加函数名即可调用。

ClassName::StaticMemberFunction();

II - 静态函数不可以声明为虚函数


如果静态成员函数加上 virtual 关键字,则会编译报错。

class StaticMemberFuncTest
{
public:
	static virtual void test() {};
};

编译报错为:virtual 关键字不可以与 static 一起使用。

 error C2216: 'virtual' cannot be used with 'static'

III - 静态成员函数不包含 this 指针


如概述所说,静态成员函数不属于对象,而属于类,所以不包含 this 指针。从定义上来讲静态成员函数不使用类中的非静态成员变量。

成员函数既可以调用静态成员变量,也可以调用非静态成员变量;而静态成员函数仅可调用静态成员变量。

示例代码

class StaticMemberFuncTest
{
public:
	static StaticMemberFuncTest * test() {
		return this;
	};
};

编译报错为:

error C2355: 'this': can only be referenced inside non-static member functions or non-static data member initializers

this 关键字只能在非静态成员函数或非静态数据成员初始化中引用。

IV - 静态成员函数不可以声明为 const


未修改成员变量的函数可以声明为常函数,加上 const 关键字,但静态成员函数不可以。

class StaticMemberFuncTest
{
public:
	static void Test() const {
		//;
	};
};
error C2272: 'Test': modifiers not allowed on static member functions

静态成员函数上不允许使用访问限定词,如 const , volatile 等。

V - static 关键字不构成重载


如果一个静态成员函数与一个成员函数的函数名相同,且参数类型列表相同,此两者不会构成重载。

代码示例

class StaticMemberFuncTest
{
public:
	static void Test() {}
	void Test() {}
};

编译报错

error C2686: cannot overload static and non-static member functions with the same parameter types
note: could be 'void StaticMemberFuncTest::Test(void)'
note: or       'void StaticMemberFuncTest::Test(void)'

不能用相同的参数类型重载静态和非静态成员函数。

参考链接:
http://c.biancheng.net/view/2228.html

你可能感兴趣的:(C++,c++,开发语言,经验分享,学习)