首页 > 其他分享 >static/const/vitual/inline函数互属问题

static/const/vitual/inline函数互属问题

时间:2022-09-01 17:26:54浏览次数:62  
标签:const 函数 互属 virtual static 析构 构造函数

静态成员函数并不会关联到this指针,因此差不多等同于外部函数。主要有下面三个特性
1. 不能直接存取其class内的非静态成员
2. 不能够直接声明为const
3. 不需要通过对象来调用。

Static成员函数能声明为const吗?
不能。static成员函数是类所有的,可以直接用类名访问,不属于任何一个对象,访问时不会带上this指针。
但是const成员函数,访问时会添加一个隐式的const this*, 二者的用法是冲突矛盾的。

static成员函数能声明为virtual吗?
不能。静态成员函数对于每个类来说只有一份代码,没有多态绑定的必要性。

为什么C++不支持构造函数为虚函数?
虚函数通过虚指针vptr来访问,vptr通过构造函数来初始化。如果构造函数是虚函数,也就是产生无法产生vptr,将陷入悖论。

下面我们来看上面几个问题
1.类的析构函数可以为virtual吗?
毋庸置疑,对于可能作为基类的类的析构函数要求就是virtual的。因为如果不是virtual的,派生类析构的时候调用的是基类的析构函数,而基类的析构函数只要对基类部分进行析构,从而可能导致派生类部分出现内存泄漏问题。
2.类的构造函数可以为virtual吗?
答案也是不能的,通过上面虚函数的调用方式我们知道虚函数是通过vptr来访问的。那么vptr是怎么来的呢?vptr确定通过构造函数来初始化的。鸡生蛋,蛋生鸡,鸡生蛋……
3.类的构造函数可以为static吗?
根据之前说的static不能访问非静态成员变量这点可以知道构造函数是不可以为static的。两者static是对应于每个类的,而构造函数主要负责初始化对象的。这里要提一下C#中的static构造函数是用于在使用类之前进行相关的初始化工作。比如,初始化静态成员或执行特定操作。CLR在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数。
4.类的析构函数可以为static吗?
同上。
5.virtual函数可以为static吗?
答案是不可以。virtual函数和static函数访问方式是不一样。

标签:const,函数,互属,virtual,static,析构,构造函数
From: https://www.cnblogs.com/dzjgetthere/p/16647194.html

相关文章

  • Day30static
    staticpackageoop.demo2;//static静态publicclassStudent{privatestaticintage;//静态的变量多线程privatedoublescore;//非静态的变量p......
  • private static final long serialVersionUID = 1L 的作用
    1、这句话的意思是定义程序序列化ID2、什么是序列化?Serializable,Java的一个接口,用来完成java的序列化和反序列化操作的;任何类型只要实现了Serializable接口,就可以......
  • const
    侯捷老师总结的一张非常好的表格:注意画叉×的地方另外要注意的是:一:这个才是const函数!!!intlinktime()const{returnlinktime_;}  这个只是返回值......
  • c++ static修饰的函数作用与意义
    static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类:1.如果这个静态函数出现在类里,那么它是一个静态成员函数;静态成员函数的作用在于:调用这个函数不会访......
  • C++:const常量的存储位置
    ......
  • SpringBoot在@PostConstruct方法中调用FeignClient加载不到Hystrix配置问题
    版本信息spring-cloud-starter-openfeign:2.1.3.RELEASEspring-boot-starter-parent:2.2.2.RELEASE问题描述@Service类@Autowired了一个@FeignClient,在@PostConstruc......
  • JAVA进阶--static、工具类、单例、继承--2022年8月28日
    第一节 static静态关键字1、成员变量的分类和访问分别是什么样的?静态成员变量(有static修饰,属于类,加载一次,可以被共享访问)访问格式:类名.变量......
  • Delphi 中constructor、destructor、property(构造函数,析构函数、属性)关键字的用法
    首先搜索现成的文章学习原文:https://www.cnblogs.com/guorongtao/p/15132445.html其次自己理解并总结最常见的用法constructor用来定义构造函数,destructor用来定义析构......
  • javascript中的constructor
    1.使用constructor   constructor是Object类型的原型属性,它能够返回当前对象的构造器(类型函数)。利用该属性,可以检测是否复合类型数据的类型,如对象,数组和函数等。v......
  • constraint_mode( ):控制约束
    与rand_mode()类似,还有一个constraint_mode()可以打开/关闭约束。constraint_mode()方法可用于控制约束是活动的还是非活动的。当约束处于非活动状态时,randomize(......