C++新特性(类)
来源:互联网 发布:淘宝燕山大学河北大街 编辑:程序博客网 时间:2024/04/28 23:34
类机制:
类是对某一类对象的抽象;对象是某一类的实例;
类是一种复杂的数据类型,将不同类型的数据和这些数据相关的操作封装在一起的集合体;
通过一道程序题来感受从结构到类的转变:
传统的面向过程程序设计中,程序的表示方法是:
程序=算法+数据结构
面向对象程序设计中,程序的表示方法是:
对象=算法+数据结构
程序=对象+对象+对象+。。。
一个操作银行账户的程序,用面向过程的方法来做,思路如下:
先创建一个银行账户的结构,然后增加存钱,取钱,打印,初始化等相关的各种函数。
#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中:
#ifndef SAVING_H_INCLUDED#define SAVING_H_INCLUDED#include<iostream>class CSaving{ int accoutId; float balance;public: 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中
#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#: VS2008的新特性(一)
- 12c新特性
- Objective-C新特性
- Objective-C新特性
- Objective-C新特性
- Objective-C新特性
- 12C新特性
- C#7.0新特性
- Objective-c新特性
- C+11 新特性
- C++新特性(类)
- Delphi2009/C++Builder2009新特性
- C 99的新特性
- Objective-C 新特性
- Objective-C的新特性
- Objective-C的新特性
- Objective-C的新特性
- ios6 objective-c新特性
- POJ 2096 Collecting Bugs (DP求期望) #by Plato
- SQLite存取图片
- 修改一下默认存储数据库的目录。
- POJ 1149 PIGS(最大流)
- 百度 - 搜索框的suggestion
- C++新特性(类)
- 25个常用的SSH命令
- visual C++ 2010 MFC 不收缩隐藏那些不经常使用的菜单项
- AS3垃圾回收机制
- 制作自定义背景Button按钮、自定义形状Button的全攻略
- 看姐姐和妹子如何学编程 http://kb.cnblogs.com/page/158258/
- 写到prototype里的属性什么时候各实例共享值,什么时候不共享?
- ArcGIS Server 10 Java 版的Rest服务的部署方法
- VC6.0 和VS2005 自定义消息映射问题