C++新特性(类)里面讲的很清楚,转给大家分享一下

类机制:

类是对某一类对象的抽象;对象是某一类的实例;

类是一种复杂的数据类型,将不同类型的数据和这些数据相关的操作封装在一起的集合体;

通过一道程序题来感受从结构到类的转变:

传统的面向过程程序设计中,程序的表示方法是:

程序=算法+数据结构

面向对象程序设计中,程序的表示方法是:

对象=算法+数据结构

程序=对象+对象+对象+。。。

一个操作银行账户的程序,用面向过程的方法来做,思路如下:

先创建一个银行账户的结构,然后增加存钱,取钱,打印,初始化等相关的各种函数。

1
#include <iostream>    using namespace std;  struct savings{      int accountId;      float balance;  };  savings s;  void saving(float money);  void assume(float money);  void init();  void disp();  int main()  {      float money=0;      init();      cout<<"请输入存款金额:"<<endl;      cin>>money;      saving(money);      cout<<"请输入取款金额:"<<endl;      cin>>money;      assume(money);      disp();      return 0;  }  void init(){      s.accountId=10000;      s.balance=0;  }  void saving(float money){      s.balance+=money;  }  void assume(float money){      s.balance-=money;  }  void disp(){      cout<<"账号:"<<s.accountId<<endl;      cout<<"余额:"<<s.balance<<endl;  }

问题:如果这个时候,银行要求实现更多的功能,如外汇存款交易,外汇取款交易,自动利息计算等,则必须扩充原来数据结构,数据结构一旦改变,依赖它的函数也必须跟着改变,这样就需要不断地维护以前的函数,同时扩充新的函数

解决方法:用面向对象的方法来进行编程,先定义好一个银行账户类,然后不断地对这个类进行扩充和叠加就可以实现新功能,而不用维护原来的代码。类的定义格式一般分为声明和实现两部分,其中声明部分用来说明类中的成员(告诉使用者“干什么”),包含数据成员的声明和成员函数的声明。实现部分用来对成员函数的实现(告诉使用者“怎么干”)。

下面程序为用对象来实现银行账户的操作

在头文件saving.h中:

1
#ifndef SAVING_H_INCLUDED  #define SAVING_H_INCLUDED  #include<iostream>  class CSaving  {      int accoutId;      float balance;  <span style="color:#000000;">public:  </span>    void init(){          accoutId=10000;          balance=0;      }      void saving(float money)      {          balance+=money;      }      void assume(float money)      {          balance-=money;      }      void disp(){          cout<<"账号为:"<<accoutId<<endl;          cout<<"余额为:"<<balance<<endl;      }  }      #endif // SAVING_H_INCLUDED

在源文件main.cpp中

1
#include <iostream>  #include "Saving.h"      int main()  {      CSaving s;            //定义CSaving对象s      float money=0;      s.init();                 //初始化对象s,用对象来给其成员进行赋值和操作      cout<<"请输入存款金额:";      cin>>money;      s.saving(money);      cout<<"请输入取款金额:";      cin>>money;      s.assume(money);      s.disp();      return 0;  }

程序中 public关键字,使用来把类体中的成员函数的访问权限设定为公共访问权限,即定义为类对外的接口。具有公共访问权限的成员可以在程序中被对象访问和调用。

从代码中可以看出,所有的方法都是通过对象s调用的,相当于对象本身就具有存钱,取钱,打印和初始化等方法了。

通过这段代码和面向过程相比较,可以很清楚的感受到面向对象的优越性。如果是面向对象的程序设计方法,只需要把类设计好,然后用其定义对象,在程序中,就只是对象的叠加而已。

指向对象的指针:

对象指针名->数据成员名       //访问类的数据成员

对象指针名->成员函数名(参数表)     //访问类的成员函数

要访问CSaving类的对象指针pSaving所指向的对象中的成员,方法为:

pSaving = &CSaving

pSaving->accountId;

pSaving->saving(1.5);

内联函数:把函数实现放在类体中的成员函数,编译时被当做内联函数;调用时,是把调用函数处的语句,用内联函数体的代码来替换,节省了调用的开销,提高了运行的速度。

外联函数:函数声明放在类体内,实现放在类体外的成员函数,被称为外联函数。

成员函数如果在类体内,不用加作用域运算符“::”但如果在类体外,则要在函数名的前面加上该函数所属类的标识,并用作用域运算符“::”进行连接。

“::”主要用于说明成员函数是属于哪个类的,即成员函数的声明在哪个类中,该运算符的使用格式如下
类名::函数名(参数表)

如:void CSaving::assume(float money){

....

}

成员函数可以实现重载,如参数个数不同的重载

可以给成员函数的参数设置默认值:

如在CTest类中声明:void init(int n=10);

在存放函数定义的源文件:void CTest::init(int n){

sum=n;

}

在main.cpp中,CTest t1,t2;

t1.init();这个时候就是用默认值,

t2.init(5);这个时候是用的是传的参数5,不是用默认值。

类对成员访问控制

优点:1、如同电视机,内核被保护,按钮被人人使用;2、使类对其本身内部函数实现的负责;3、限制类与外部世界的接口;4、减少类与其他代码的关联程度。

各种控制关键字:

public公共访问:public定义的成员,就是类对外的接口,外部只能通过这个接口,才能访问类的成员。其一般是成员函数,以方便用户调用

protected和private定义的成员,一般是类的数据成员,主要用来描述类的对象的属性,用户无法直接访问和使用,只有类中成员函数才能对其进行访问和使用。

我觉得一个c++的界面库也不错:http://www.uipower.com/index.php?m=content&c=index&a=lists&catid=9

C++新特性(类)(转载)的更多相关文章

  1. JDK1.5/1.6/1.7之新特性总结(转载)

    原文地址:http://www.cnblogs.com/yezhenhan/archive/2011/08/16/2141510.html 如果原作者看到不想让我转载请私信我! 开发过程中接触到了从j ...

  2. Java8新特性(转载)

    1.Lambda表达式 Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变.使用 Lambda 表达式可以使代码变的更加简洁紧凑. Lambda允许把函数作 ...

  3. 使用Modernizr探测HTML5/CSS3新特性(转载)

    转载地址:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.h ...

  4. C# 6.0新特性(转载)

    简介 VS 2015中已经包含C# 6.0. C#在发布不同版本时,C#总是会有新特性,比如C#3.0中出现LINQ,C#4.0中的动态特性,c#5.0中的异步操作等.. C# 6.0中与增加了不少新 ...

  5. VS2015 C#6.0 中的那些新特性(转载)

    自动属性初始化 (Initializers for auto-properties) 以前我们是这么写的 为一个默认值加一个后台字段是不是很不爽,现在我们可以这样写 只读属性的初始化(Getter-o ...

  6. 前端笔记之ES678&Webpack&Babel(中)对象|字符串|数组的扩展&函数新特性&类

    一.对象的扩展 1.1对象属性名表达式 ES6可以在JSON中使用[]包裹一个key的名字.此时这个key将用表达式作为属性名(被当做变量求值),这个key值必须是字符串. var a = 'name ...

  7. Mysql 5.6 新特性(转载)

    本文转载自 http://blog.csdn.net/wulantian/article/details/29593803 感谢主人的辛苦整理 一,安全提高 1.提供保存加密认证信息的方法,使用.my ...

  8. 003.ES2015和ES2016新特性--类.md

    JavaScript使用的是基于原型的OO模型,用对象字面量或者函数来实例化对象,用原型链来实现继承. 这样对于数据传统C++.Java的OO范式的开发者来说,会感到比较困惑,于是从ES2015开始逐 ...

  9. ECMASCRIPT5新特性(转载)

    Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name   ...

  10. 2.ES6引进的新特性——类Class

    为什么? ES6中引入了类,类在java/c++等面向对象的编程语言常见,JS引入类是为了在日后使用js开发大型的应用程序,类本质是语法糖(语法上更加人性化) 以前写一个类 function User ...

随机推荐

  1. 数迹学——Asp.Net MVC4入门指南(2):添加一个控制器

    自嘲一下......万事还是得从官方的入门开始 由于找不到适合新新手的MVC入门实例所以回过头来做一下微软的 <Asp.Net MVC4入门指南>. 只有把自己放在太阳下暴晒,才知道自己有 ...

  2. [转]没有了SA密码,无法Windows集成身份登录,DBA怎么办?

    没有了SA密码,无法Windows集成身份登录,DBA怎么办?  原文:http://www.cnblogs.com/i6first/p/3512779.html 一同事反馈SQL无法正常登录了,以前 ...

  3. How to Allow MySQL Client to Connect to Remote MySql

    How to Allow MySQL Client to Connect to Remote MySQ By default, MySQL does not allow remote clients ...

  4. IE6与 javascript:void(0)

    遇到过几次这种问题,现在总结一下. 代码: <a onclick="window.location.href='http://www.google.com'" href=&q ...

  5. Spring Framework----定时任务的执行和调度

    1. 简介 spring framework 为任务的异步执行和调度提供了抽象接口分别是:TaskExecutor 和 TaskScheduler,spring 对这些接口的进一步实现支持线程池或者将 ...

  6. MyBatis学习总结(七)——Mybatis缓存

    一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...

  7. 物流公司统计按物资类别采购的前二十家sql

    2.集团主要的供应商(按物资分类列举前10或20家名单),年采购金额.占比,结算方式,付款周期:(夏) 年份要求是2013年 arap_djfb中的单据日期不是常规的日期类型 需要做这样的转换才可以 ...

  8. angularjs jquery thinkPHP3.2.3 相结合小实例

    angular1.5 与 jquery想结合一个小应用 index.html <html> <head> <meta charset="utf-8"& ...

  9. PNG与iOS优化选项

    从App Store下载到的每一枚App最初都是一只IPA文件(其实是zip格式,内含特定规则的文件夹组织方式).但当作zip解开之后会发现里面很多的PNG文件看不了,这是因为在这些PNG图像都已被i ...

  10. shutdown immediate时 hang住 (转载)

    shutdown immediate 经常关库时hang住,在alert中有 License high water mark = 4All dispatchers and shared servers ...