类声明和定义中const、inline、默认参数、explicit、static、virtual的基本使用方法
2014-12-16 22:27
615 查看
在类申明中,在形参表之后添加关键字const,使成员函数变成常量(我们可以理解为将this指定指定为常量),如此便不能通过成员函数来修改对象的数据成员,无论是共有的还是私有的。例如double avg_price() const;该函数avg_price()不能更改对象的任何数据成员。需要强调一点的是:const关键字必须同时出现在类的申明和定义中,若只出现一次,将会报错。
如果类的成员函数带有默认参数,那么注意一点:默认参数只能出现在申明和定义中的一处。(有且只能是一处)我们建议是在类的申明中进行默认参数的说明,而在定义中不再说明。
首先要了解的一点是在类内部定义的成员函数默认是内敛函数。当然我们也可以显示说明函数的内敛特性。值得注意的是可以在申明或者定义处显示指明函数的内敛特性。需要保证的是内敛函数的定义需要在调用该函数的地方是可见的,因此我们还是建议将内敛函数的定义和类的申明(定义)一同放在头文件中,以保证其在调用处的可见性。
explicit关键字是用来标识该类不能够进行隐式类型转换的。它只能用于类内部的构造函数的申明上面,出现地方也只能是类声明内部,在类外体定义上不再重复关键字explicit
static:当我们在类外部定义static成员时,无须重复指定static保留字,该保留字只出现在类定义体内部的声明处。此外static数据成员必须在类定义体的外部定义。因为它不能通过类构造函数进行初始化。
[cpp] view
plaincopyprint?
class Account{
private : static double interestRate;
}
double Account:: interestRate=initRate();//在此处不能再出现关键字static
并且该静态数据的定义必须是放在类体外进行的。但是也是存在一个例外,如果该静态数据成员是常量,那么该成员可以在类定义体内进行初始化,是直接初始化。纯粹的const数据成员是通过构造函数的初始化列表进行初始化的。
[cpp] view
plaincopyprint?
class Account{
private:
static const int period =30;//它可以是在类定义体内进行定义的。
}
virtual:表示虚函数,只出现在基类的声明中,在基类中构造函数和static修饰的函数不能设定为虚函数,析构函数一般都设为虚函数。然后通过基类的引用或者指针作为形参,实参传递可以是继承类的对象,并且在函数中使用虚函数时,在运行时才能确定调用哪个继承类中的函数。
[cpp] view
plaincopyprint?
void print_total(ostream &os,const Item_base &item,size_t n)
{
os<<"ISBN:"<<item.book()<<"total price: "<<item.net_price(n)<<endl;//因为在基类Item_base中,net_price函数是虚函数,在运行时才确定调用哪个函数版本
}
虽然在函数的形参中我们写的是对基类的引用,但是在实际调用函数时我们却可以将继承类的对象 item_inherit传递过去。这样在运行时我们就确定net_price使用的是在继承类中实现的版本。同样需要注意的是:virtual关键字只能出现在基类的声明中,在类外的定义中,virtual关键字不再出现。
转自:http://blog.csdn.net/lollipop_jin/article/details/7935382
如果类的成员函数带有默认参数,那么注意一点:默认参数只能出现在申明和定义中的一处。(有且只能是一处)我们建议是在类的申明中进行默认参数的说明,而在定义中不再说明。
首先要了解的一点是在类内部定义的成员函数默认是内敛函数。当然我们也可以显示说明函数的内敛特性。值得注意的是可以在申明或者定义处显示指明函数的内敛特性。需要保证的是内敛函数的定义需要在调用该函数的地方是可见的,因此我们还是建议将内敛函数的定义和类的申明(定义)一同放在头文件中,以保证其在调用处的可见性。
explicit关键字是用来标识该类不能够进行隐式类型转换的。它只能用于类内部的构造函数的申明上面,出现地方也只能是类声明内部,在类外体定义上不再重复关键字explicit
static:当我们在类外部定义static成员时,无须重复指定static保留字,该保留字只出现在类定义体内部的声明处。此外static数据成员必须在类定义体的外部定义。因为它不能通过类构造函数进行初始化。
[cpp] view
plaincopyprint?
class Account{
private : static double interestRate;
}
double Account:: interestRate=initRate();//在此处不能再出现关键字static
并且该静态数据的定义必须是放在类体外进行的。但是也是存在一个例外,如果该静态数据成员是常量,那么该成员可以在类定义体内进行初始化,是直接初始化。纯粹的const数据成员是通过构造函数的初始化列表进行初始化的。
[cpp] view
plaincopyprint?
class Account{
private:
static const int period =30;//它可以是在类定义体内进行定义的。
}
virtual:表示虚函数,只出现在基类的声明中,在基类中构造函数和static修饰的函数不能设定为虚函数,析构函数一般都设为虚函数。然后通过基类的引用或者指针作为形参,实参传递可以是继承类的对象,并且在函数中使用虚函数时,在运行时才能确定调用哪个继承类中的函数。
[cpp] view
plaincopyprint?
void print_total(ostream &os,const Item_base &item,size_t n)
{
os<<"ISBN:"<<item.book()<<"total price: "<<item.net_price(n)<<endl;//因为在基类Item_base中,net_price函数是虚函数,在运行时才确定调用哪个函数版本
}
虽然在函数的形参中我们写的是对基类的引用,但是在实际调用函数时我们却可以将继承类的对象 item_inherit传递过去。这样在运行时我们就确定net_price使用的是在继承类中实现的版本。同样需要注意的是:virtual关键字只能出现在基类的声明中,在类外的定义中,virtual关键字不再出现。
转自:http://blog.csdn.net/lollipop_jin/article/details/7935382
相关文章推荐
- 类声明和定义中const、inline、默认参数、explicit、static、virtual的出现频率
- 类声明和定义中const、inline、默认参数、explicit、static、virtual的出现频率
- inline, const, virtual, static四个关键字使用时应该放在哪里?
- inline, const, virtual, static四个关键字使用时应该放在哪里
- 基本内置类型 声明与定义 static与entern const auto register volatile
- 修饰类成员函数的几个关键字:inline, const, explicit, static, virtual
- C++中重构函数声明定义与static变量使用方法
- 全局变量声明,定义与使用方法
- java4android(5)面向对象、类的定义、生成对象的方法、使用对象的方法、生成多个对象、构造函数super()、函数重载、static、继承
- php类中的$this,static,final,const,self这几个关键字使用方法
- C++中static、const使用方法简介
- php面向对象类中的$this,static,final,const,self及双冒号 :: 这几个关键字使用方法。
- 【转】static和extern的区别;当使用另外一个文件中的变量、类、方法时,什么时候改用extern声明,什么时候该include?
- c++带默认参数的函数的声明、定义及使用总结
- OC - 类的基本定义与方法的使用
- 关于静态字段方法.const,static的使用
- 关键字 extern static const, 声明和定义的区别
- 关键字 extern static const, 声明和定义的区别
- static, const, inline, virtual function 辨析
- 类的数据成员的 const、static等类型的声明和定义常识