设计类时,考虑以下五点

1、构造函数初始化列表

2、函数该不该加const

3、参数传递尽量考虑用引用传递,考虑加不加const

4、返回用不用引用

5、数据尽量放在private,函数尽量放在public

一、构造函数

①构造函数参数名不能与类成员名相同

②只有当没有定义能和构造函数时,编译器才提供默认构造函数

③两种定义默认构造函数的形式

1、给已有构造函数的所有参数提供默认值.Stock(const string & co="Error",int n=0,double d=0.0);

2、通过函数重载,定义一个没有参数的构造函数。Stock();

④成员初始化参数列表。

Classy::Classy(int n,int m) : mem1(n),men2(0),men3(n*m+2)

{

//........

}

1、其只能用于构造函数

2、对非静态const数据成员,必须用器来初始化

3、对引用数据成员,必须用器来初始化

4、成员初始化的顺序与其在类声明中出现的顺序相同,与初始化器中的排列顺序无关

⑤析构函数

程序必须有一个析构函数,如果没有,编译器将默认的生成一个析构函数。当在构造函数中使用了new来分配内存时,必须使用delete来释放内存。

二、参数引用

引用变量的主要用途是将引用变量用作形参,使函数可以使用原始数据。引用是已定义变量的别名,与变量指向相同的值和内存单元。单独使用引用变量,在声明引用时必须将其初始化,而不是像指针那样,先声明后赋值。下面程序将看到传递引用时,函数将使用原始数据,改变引用将改变原始数据,与已往的按值传递不同。

#include<iostream>

void swapr(int & a,int & b);

int main()
{
using namespace std;
int m=,n=; swapr(m,n);
cout << "m " << m << " n " << n << endl; return ;
} void swapr(int & a,int & b)
{
using namespace std;
int temp;
temp=a;
a=b;
b=temp;
cout << "a " << a << " b " << b << endl;
}

结果如下

原始数据和形参的值都发生了交换。

由于改变引用的值,会同时修改原始变量,为了然函数使用传递的信息,而不对这些信息进行修改,同事用像使用引用,则可以使用常量引用,相比于普通变量,const变量属于不可修改的左值。

将引用参数声明为const引用有三个好处:

①使用const引用可以避免无意中修改数据的编程错误;

②使用const引用是函数能够处理const和非const实参,否则只能接受非const实参;

③使用const引用可以使函数能够正确的生成并使用临时变量。

函数参数使用引用、指针和按值传递的选择

对于使用传递的值而不作修改的函数

1、如果数据对象很小,如内置的数据类型或小型结构,则按值传递
2、如果数据对象是数组,则使用指针(唯一选择),并将指针声明为指向const的指针
3、如果数据对象是较大的结构,则使用const指针或const引用,提高效率
4、如果数据对象是类对象,则使用const引用

对于修改函数中数据的函数

1、如果数据对象很小,如内置的数据类型或小型结构,则使用指针
2、如果数据对象是数组,则使用指针(唯一选择)
3、如果数据对象是较大的结构,则使用指针或引用
4、如果数据对象是类对象,则使用引用

三、返回引用

返回引用可以提高效率。返回引用要注意的问题:避免返回函数终止时不存在的内存单元的引用(如在函数中生命的临时变量)。可以返回作为参数传递给函数的引用,也可以使用new分配新的存储空间,但要使用delete删除存储空间。

一般如果函数要返回局部对象的话,应该返回对象,而不是引用,如果函数返回一个没用公有复制构造函数的类的对象,这必须返回对象的引用。如果返回的对象需要修改,则返回非const引用,如果不修改,则返回const引用。

四、函数加const

只要类方法不修改调用对象,就应该将其声明为const。

 

C++类编程(一)const的使用的更多相关文章

  1. js中的行为委托和无类编程

    概述 <你不知道的JavaScript>中有这么一段话:不幸的是,将类和继承的设计模式思维带入Javascript的想法是你所做的最坏的事情,因为语法可能会让你迷惑不已,让你以为真的有类这 ...

  2. Python进阶开发之元类编程

    系列文章 √第一章 元类编程,已完成 ; 本文目录 类是如何产生的如何使用type创建类理解什么是元类使用元类的意义元类实战:ORM . 类是如何产生的 类是如何产生?这个问题肯定很傻.实则不然,很多 ...

  3. python3 元类编程的一个例子

    [引子] 虽然我们可以通过“class”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...

  4. Python元类编程

    来源:http://python.jobbole.com/88582/ @property装饰器,是将类中的函数当做属性调用 Python类中定义的属性,如果属性名前面只有一个下划线,那么就是一种规范 ...

  5. 【c++】类中的const成员

    const成员变量 举个例子 #include <iostream> using namespace std; class A { public: A(int size) : SIZE(s ...

  6. C++ —— 非类中使用const定义常量的初始化,以及#define和typedef的区别

    总结一下在非类中使用const关键字定义常量时的初始化问题,亲测VS2015.顺便记录#define宏和typedef的区别. 1 首先对const声明的常量的初始化做简单小结: , w2 = , w ...

  7. C++ 类中的const关键字

    //类中的const关键字 #include<iostream> using namespace std; class Point{ public: //这个const关键字本质上修饰的是 ...

  8. PythonI/O进阶学习笔记_7.python动态属性,__new__和__init__和元类编程(上)

    content: 上: 1.property动态属性 2.__getattr__和__setattr__的区别和在属性查找中的作用 3.属性描述符 和属性查找过程 4.__new__和__init__ ...

  9. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  10. Dart编程实例 - Const 关键字

    Dart编程实例 - Const 关键字 void main() { final v1 = 12; const v2 = 13; v2 = 12; } 本文转自:http://codingdict.c ...

随机推荐

  1. qt添加最小化和关闭按钮

    int width = this->width();//获取界面的宽度 //构建最小化.最大化.关闭按钮 QToolButton *minButton = new QToolButton(thi ...

  2. DOM0,DOM2,DOM3事件,事件基础知识入门

    事件是javascript和HTML交互基础, 任何文档或者浏览器窗口发生的交互, 都要通过绑定事件进行交互; 事件有DOM0, DOM2和DOM3的区分(别问我怎么少了一个DOM1, 也没找到DOM ...

  3. 关于obj和基本类通过函数参数传进去执行是否改变原来的值

    var obj = { p1 : 1, p2 : 2 }; (function(_/* 这个东东是地址的应用哦 */){ _.p1 = 3, _.p2 = 4 })(obj) var i = 2; ( ...

  4. Java 并发-访问量

    有几个常用的措施 1.对常用功能建立缓存模块 .尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能.统计的功能尽量做缓存,或按每天一统计或定时统计相关报表 ...

  5. C#给文件夹添加权限

    //==== //添加权限 private void SetAttributes(string folder) { if (folder == "" || !Directory.E ...

  6. 全排列(java版)

    适用于不同数字的全排列,其实也适用于有重复数字的全排列,只不过的出来的结果有重复,需手动删减掉重复的组合. package testFullPermutation; import java.util. ...

  7. 轻量级应用开发之(10) UINavigationController导航控制器

    一 多控制器 1)一个iOS的app很少只由一个控制器组成,除非这个app极其简单2)当app中有多个控制器的时候,我们就需要对这些控制器进行管理3)有多个view时,可以用一个大的view去管理1个 ...

  8. LocalDB简介和在VS2012及以上版本的使用

    http://www.cnblogs.com/fzrain/p/3812364.html?utm_source=tuicool LocalDB简介和在VS2012及以上版本的使用   之前一不小心把自 ...

  9. MyEclipse使用SVN进行项目版本控制

    一.搭建SVN服务器. 例如,使用VisualSVN Server,下载后安装. (1)在Repositories(版本库)上右击,新建Repository,选择Regular FSFS reposi ...

  10. WAMP 403 Forbidden禁止访问

    WAMP .5修改方法 修改httpd.conf文件 # onlineoffline tag - don't remove Require local To # onlineoffline tag - ...