C++基础知识--static成员和const成员函数

我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。能不能同时用static和const修饰类的称冠函数?

不能。C++编译器在实现const成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时static的用法和static是冲突的。

Static的作用是表示该函数只那个在雷辛格的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。

使用一个类的NULL指针调用这个类中的一个函数,但是这个函数没有用到这个类的成员变量,那么是可以成功的,如果调用的函数中用到了这个类中的成员变量,那么就会崩溃,如果调用了虚函数,也会有问题,因为虚函数是伴随着实例化产生的。没有实例化就不会有虚函数表。

静态成员函数能不能同时也是虚函数?

不能,调用静态成员函数不要实例。但是调用虚函数需要从一个实例中指向虚函数表的指针以得到函数的地址,因此调用虚函数需要一个实例。

C++中,成员变量的初始化顺序与变量再类中的声明顺序相同,而与他们在构造函数的初始化列表中的顺序无关。

拷贝构造函数不能传值,只能传递引用,如果是传值,那么在函数的构造函数中就必须使用这个函数本身,这是不合理的现象。

函数缺省参数值是在编译期确定的,是静态绑定的,但是引用、指针的虚函数调用哪个类型的函数是在运行的时候

在一个函数内部的常量字符串不会因为函数调用的结束而消失

时间: 2024-11-08 23:05:44

C++基础知识--static成员和const成员函数的相关文章

php基础知识总结(3)字符串函数string

一.大小写转换 1.strtolower()--转换为小写. echo strtolower("Hello WORLD!"); //hello world! 2.strtoupper()--转换为大写. echo strtoupper("Hello WORLD!"); //HELLO WORLD! 3.ucfirst()--把首字母转换为大写. echo ucfirst("hello world");     //Hello world 4.uc

php基础知识总结(4)时间函数date

一.time() -- 返回当前的 Unix 时间戳 $nextWeek = time() + (7 * 24 * 60 * 60); echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n"; 二.mktime(时/分/秒/月/天/年) -- 取得一个日期的 Unix 时间戳 echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));  //Jan-01-1998 echo da

C++基础知识---static const成员变量的初始化

为了将常量的作用域限制于class内,你必须让让成为class的一个成员:而为确保此常量之多只有一份实体,你必须让让成为一个static成员: Class Gameplayer { Private: Staticconst int Number = 5;  //常量声明式 Intscores[Number];  //使用该常量 }: 然而你所看到的是Number的声明式而非定义式.通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需

C++基础知识--static成员和const成员

我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).能不能同时用static和const修饰类的称冠函数? 不能.C++编译器在实现const成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*.但当一个成员为static的时候,该函数是没有this指针的.也就是说此时static的用法和static是冲突的. Static的作用是表示该函数只那个在

C++基础知识(六)--类--成员函数的定义--对象的创建与使用--从面向过程到面向对象

一.类 1.类是一种数据类型,将数据与对数据的操作(函数)放到一起.一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口,对象之间通过消息进行通讯. 2.如果在类的起始点无访问说明符,系统默认为私有(private) 3.类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员进行初始化.类中的任何数据成员也不能使用关键字extern,auto,register等关键字限定其存储类型 二.成员函数的定义 1.函数定义:通常在类定义中,成员函数仅做声明,函数

C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构

一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型,我们如果想通过一个父类指针调用父类.子类中的同名函数的话,这个函数是有要求的: 在父类中,eat函数声明之前必须要加virtual声明eat()函数为虚函数. 一旦某个函数被声明为虚函数,那么所有派生类(子类)中eat()函数都是虚函数. 为了避免你在子类中写错虚函数,在C++11中,你可以在函数

机器学习--基础知识复习(模式识别,成本函数)

由于时间原因,今天主要复习下machine learning课程的前三节,简单记录自己的理解. 1.模式表达(Model representation) 其实就是指通过一定的范例数据学习追踪生成一个函数的表达形式.然后通过矩阵得到整个运算过程. 模型表达就是给出输入和输出之间的函数关系式,当然这个函数是有前提假设的,里面可以含有参数. 比如下图,我们有一个房子的大小size,卧室数目(bedrooms)然后得到房屋价格(price),通过这三个常数就可计算一个输入和输出的函数关系. hprice

类的const成员

类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他的const成员函数,而不能访问非const成员函数 const可以修饰static数据成员,在定义时初始化,但仍要在类外进行声明 const成员函数不能修改类的对象,即不能修改数据成员,但当数据成员被mutable修饰时,可以修改 const不能修饰static成员函数,因为const表示不修改类

【转】C++ const成员变量和成员函数(常成员函数)

转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击<C++初始化列表>回顾. const成员函数(常成员函数) const 成员函