静态成员函数和常成员函数的关系
时间: 2024-06-04 11:07:15 浏览: 16
静态成员函数和常成员函数是两个概念上没有直接关系的概念,它们是分别针对类中的静态成员函数和常成员函数的特性。
静态成员函数是一个不依赖于类的实例而存在的函数,它可以通过类名直接调用,而不需要通过类的实例来调用。静态成员函数可以访问类的静态成员,但不能访问类的非静态成员。因为静态成员函数不依赖于类的实例,所以它没有this指针。
常成员函数是一个在函数声明中使用const关键字修饰的成员函数,它承诺不会修改类的成员变量。常成员函数可以被类的实例调用,但只能访问类的常成员和静态成员。因为常成员函数不会修改类的成员变量,所以它可以被const修饰的对象调用。
在使用静态成员函数和常成员函数时,它们的区别主要在于调用方式和对类成员的访问权限。静态成员函数可以通过类名直接调用,常成员函数则需要通过类的实例来调用。常成员函数限制了函数对类成员的修改,而静态成员函数则没有这个限制。
相关问题
类成员函数做函数指针
回答: 类成员函数指针是指向类的非静态成员函数的指针。在使用类成员函数指针时,需要使用类对象或者指针来调用指针所指的成员函数。这是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数。在C语言中,直接使用类成员函数指针会报错,需要注意使用方法的区别。类成员函数指针是有真正的内存地址的,这个地址一般跟具体的类对象没有什么关系,因为类被需要的时候会被载入内存,类成员函数也会被载入内存。下面是一个示例代码,演示了类成员函数指针的使用方法:
```cpp
#include <iostream>
using namespace std;
class CT {
public:
void func(int tmp) {
cout << "func()普通函数, tmp = " << tmp << endl;
}
virtual void virtualfunc(int tmp) {
cout << "virtualfunc()虚函数, tmp = " << tmp << endl;
}
static void staticfunc(int tmp) {
cout << "staticfunc()静态成员函数, tmp = " << tmp << endl;
}
};
int main() {
CT ct;
CT* pct = &ct;
void (CT::*func_pointer)(int); // 一个类成员函数指针变量的定义
func_pointer = &CT::func;
(ct.*func_pointer)(100); // 使用类对象来调用类成员函数指针指向的成员函数
(pct->*func_pointer)(100); // 使用类指针来调用类成员函数指针指向的成员函数
return 0;
}
```
在上述示例代码中,定义了一个类CT,其中包含了一个普通成员函数func、一个虚函数virtualfunc和一个静态成员函数staticfunc。主函数中定义了一个类对象ct和一个类指针pct,并声明了一个类成员函数指针变量func_pointer,将其指向func函数。接着使用类对象和类指针来调用func指向的成员函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [C++类成员函数指针使用介绍](https://blog.csdn.net/luoyayun361/article/details/101109522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *3* [类成员函数指针](https://blog.csdn.net/A_With_better/article/details/123079792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
讲一下普通成员函数,虚函数,纯虚函数
普通成员函数是一个在类中定义的普通函数,它可以被对象直接调用。普通成员函数没有关键字virtual,因此在继承关系中,它的调用是静态绑定的,即根据对象的类型来确定调用哪个函数。
虚函数是在基类中声明的并且带有关键字virtual的函数。它可以在派生类中被重新定义,使得派生类以不同的方式实现该函数。通过基类的指针或引用调用虚函数时,会根据指针或引用指向的对象的类型来动态绑定,即在运行时确定调用哪个函数。
纯虚函数是在基类中声明的并且没有函数体的虚函数,它只是一个接口,需要派生类来实现。派生类必须提供纯虚函数的实现才能被实例化。纯虚函数通过在基类中定义接口,约束了派生类必须提供某些特定的功能。