静态成员的使用,不理解,
使用方法不太能够,
就是不知道啥时候用
class Cat
{
public:
explicit Cat()
{
m_iNum++;
}
static int GetNum() { return m_iNum; }
private:
static int m_iNum;
};
//静态变量,类外初始化
int Cat::m_iNum = 0;
首先我们想要的效果是:cout<<Student<<endl;
因为原来的左移运算符是不能用来输出结构体Student的,所以我们需要重载来达到我们输出结构体的目的。
整体代码如下:
#include <bits/stdc++.h>
using namespace std;
struct Student{
string name;
int score;
void operator<<(const Student &student){
}
};
int main(){
Student a={"D",90};
Student b={"A",100};
a.operator<<(b);
return 0;
}
成员函数:
void operator<<(const Student &student){
}
如果我们调用这个方法的话,如下所示:
Student a={"D",90};
Student b={"A",100};
a.operator<<(b);
这样达不到我们想要的cout<<student<<endl的效果。因为他的左移运算符前不是我们需要的cout(因为cout是ostream类型)而且我们现在是a.opeartor是Student类型,所以达不到我们需要的效果。
静态成员是指在类的定义中使用static关键字定义的变量或方法。静态成员的作用在于可以被该类的所有实例所共享,可以实现一些与对象无关的操作。常见的使用场景包括:计数器、单例模式、工具类等。
静态变量的使用方法: 需要在类的定义中使用static关键字来声明静态变量,如下所示:
class MyClass {
private:
static int count; // 静态变量
public:
MyClass() { count++; } // 在构造函数中对count进行操作
static void printCount() { cout << "Count: " << count << endl; } // 静态方法,可以访问静态变量
};
int MyClass::count = 0; // 静态变量初始化,类外进行
int main() {
MyClass obj1;
MyClass obj2;
MyClass::printCount(); // 静态方法的调用,输出Count: 2
return 0;
}
注意事项: 1. 静态成员变量必须在类外进行初始化。 2. 静态成员变量可以在公有、私有和保护区域中声明,但是常见做法是将它们放在私有部分,并提供公有的接口方法来访问它们。 3. 静态成员函数中不能使用this指针,因为静态成员是与类本身相关联,而不是与类的实例相关联的。 4. 静态成员变量和函数可以直接通过类名访问,不需要通过类的实例来访问。
静态方法的使用方法: 需要在类的定义中使用static关键字来声明静态方法,如下所示:
class MyClass {
public:
static int doubleValue(int num) { return num * 2; } // 静态方法
};
int main() {
int result = MyClass::doubleValue(5); // 调用静态方法
cout << result << endl; // 输出10
return 0;
}
注意事项: 1. 静态成员方法不能访问非静态成员变量或方法,因为静态方法不属于某个具体的实例。 2. 静态成员方法只能访问静态成员变量或方法。