gpt4 book ai didi

c++ - C++中的静态函数

转载 作者:行者123 更新时间:2023-12-02 10:27:16 26 4
gpt4 key购买 nike

在学习C++时,我想到了一个问题。关于静态功能。
在此头文件中,我创建了一个静态函数。

using namespace std;
class Date
{
public:
int dd, mm, yy;
public:
//Date();
Date(int d, int m, int y);
static bool LeapYear(Date t);
};
在这个源文件中,我定义了函数
{
if ((t.yy % 400 == 0) || (t.yy % 4 == 0) && (t.yy % 100 != 0))
return true;
else
return false;
}
据说静态函数无法访问非静态成员。但是,当我将对象放入该函数中时,它仍在工作。谁能为我解释一下?谢谢!

最佳答案

静态和非静态成员函数之间的区别在于,当您调用非静态成员函数时,将隐式传递指向类实例的指针作为第一个参数(此指针)。您需要一个类的实例(一个对象)来调用非静态成员函数。因此,成员函数被授予对类实例成员的访问权限。
相反,静态成员和静态成员函数不属于类实例,它们只是类定义的一部分。这就是为什么他们不能访问任何非静态类成员的原因。这也是不能将静态函数标记为const的原因,因为它们没有可以修改的实例。

class Date
{
public:
int dd, mm, yy;

public:
Date(int d, int m, int y);

// static function
// can't be marked const because it makes no sense
static bool LeapYear(Date t) /*const*/ {
if ((t.yy % 400 == 0) || (t.yy % 4 == 0) && (t.yy % 100 != 0))
return true;
else
return false;
}

// member function - has access to this and thus to any non-static member of the instance
// marked const because it doesn't change the instance
bool isLeap() const {
if ((/*this->*/yy % 400 == 0) || (yy % 4 == 0) && (yy % 100 != 0))
return true;
else
return false;
}
};

关于c++ - C++中的静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63845042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com