class C { public: void m() {/* … */} static void s() {/* … */} }; void f() { C c1; c1.m(); C::m(); c1.s(); C::s(); }
时间: 2024-03-27 16:41:32 浏览: 16
这段代码存在一个问题:
在调用静态成员函数时,应该使用类名加作用域运算符(::)来访问,而不是使用类的对象来访问。
因此,正确的写法是:
```c++
class C {
public:
void m() { /* … */ }
static void s() { /* … */ }
};
void f() {
C c1;
c1.m(); // 调用非静态成员函数,使用对象来访问
C::s(); // 调用静态成员函数,使用类名加作用域运算符来访问
}
```
需要注意的是,静态成员函数没有this指针,因此无法访问非静态成员变量和非静态成员函数。只能访问静态成员变量和静态成员函数,或者通过参数传递的方式来访问其他成员。
相关问题
public class MyMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("spash.html"); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/upload/**").addResourceLocations("file:D:\\bishe\\qiangjunstudypic/"); //静态资源释放 registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/","classpath:/static/**","classpath:/templates/"); }
这段代码是一个Spring MVC的配置类,实现了WebMvcConfigurer接口,用于配置视图控制器和静态资源处理器。
其中addViewControllers方法用于注册一个视图控制器,将访问根路径"/"的请求映射到名为"spash.html"的视图上。
addResourceHandlers方法用于注册一个静态资源处理器,将以"/upload"开头的请求映射到指定的本地文件目录下,将以"/"开头的请求映射到classpath下的静态资源文件目录下,这些静态资源可以是html、css、js、图片等。
解释public class InterceptorConfig extends WebMvcConfigurationSupport{ @Bean public AuthorizationInterceptor getAuthorizationInterceptor() { return new AuthorizationInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**"); super.addInterceptors(registry); } /** * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations("classpath:/resources/") .addResourceLocations("classpath:/static/") .addResourceLocations("classpath:/admin/") .addResourceLocations("classpath:/front/") .addResourceLocations("classpath:/public/"); super.addResourceHandlers(registry); } }
这段代码是一个拦截器配置类,它继承了WebMvcConfigurationSupport类,并且重写了addInterceptors和addResourceHandlers方法。
其中,getAuthorizationInterceptor()方法返回一个AuthorizationInterceptor对象,它是一个自定义的拦截器。
addInterceptors方法用于配置拦截器,这里将getAuthorizationInterceptor()加入到了拦截器链中,并指定了拦截的路径为"/**",但是排除了静态资源的路径"/static/**"。
addResourceHandlers方法则是用于配置静态资源的位置,这里将"/resources/"、"/static/"、"/admin/"、"/front/"和"/public/"这些路径都映射到"/**"路径下,这样就可以通过访问这些路径下的静态资源了。