您的位置:首页 > 编程语言 > C语言/C++

C++——成员函数

2016-05-17 17:33 363 查看
参考资料:http://blog.chinaunix.net/uid-20135786-id-1976276.html

1、new关键字

new创建类对象需要指针接收。

new创建类对象使用完需delete销毁,因为编译器不会自动回收堆内存。

new创建对象直接使用堆空间,局部对象一般在栈上,则不使用new创建。

new对象指针用途广泛,比如作为函数返回值、函数参数等频繁调用场合并不适合new,就像new申请和释放内存一样。

2、inline关键字

内联函数的意思是将函数的代码直接插入函数调用点,以取代函数调用,从而消除函数调用过程的开销,代价占用一定存储。是一种以空间换取时间的机制。有点类似于C语言中的#define。

语法1: inline 函数定义

语法2: 类中定义的成员函数自动为内联函数

语法3:inline 成员函数定义(在类外定义)

inline 函数原则上放在头文件定义。这是因为内联函数需要展开,VS2013要求放在头文件中。放在头文件中方便编译器查找到内联内联函数的位置。

内联函数不能直接取地址。

内部成员函数的重载,函数指针,明确了参数,根据参数选择合适的重载了的函数。

3、const与mutable

void showxy() const; //限定内部成员不被修改。showxy函数不可以修改类内部成员的值。

void resetxy(); //没有const属性,可以修改任何成员变量属性。

mutable int z;//变量z不受const成员函数的约束。

mutable关键字约束变量不受const约束。

const int d=0;//d必须初始化。

函数const可以限制不对成员变量修改。

mutable int e;//e变量可以初始化,也可以不初始化,e不受const关键字限制。

const关键字修饰变量和修饰函数的分析:

C++中const关键字用来表示一个常量,同时const也用来修饰函数。

const所修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。因为const所修饰的函数中,要由编译器负责保护类的成员变量不被修改。而相对的,mutable则是用来修饰类的成员变量,让该变量在const所修饰的成员函数中可以被修改。所以const修饰的函数只能是类的成员函数,mutable修饰的变量只能是类的成员变量。

为什么要保护类的成员变量不被修改?

保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。而mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。

不使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。如果开发过程有比较严格的迭代过程,使用这两个关键字应该更能体现出他们的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: