C++中的类与对象
2016-06-07 18:14
239 查看
类是把函数和一些成员数据放在一起,类似于结构体struct。
声明格式是 class+类名 {
数据成员 +成员函数 } 。 class 是必须的关键词。 对象就是把 “类” 实例化 ,也类似于结构体变量的声明,它的创建格式是 类名+对象名,比如有一个已经定义的类 A ,可以这样把A实例化 A a ; a就是你创建的对象。只有创建了对象,类才能发挥作用。
在C++中,类是一种数据类型。
客观事物是复杂的,要描述它必须从多方面进行,也就是用不同的数据类型来描述不同的方面。如商场中的商品可以这样描述:
商品名称(用字符串描述),该商品数量(用整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。
这里用了属于三种不同数据类型的四个数据成员(data member)来描述一种商品。
在C++中可以这样表述:
class CGoods{
public :
char Name[21] ;
//对于中文可用wchar_t name[11]
int Amount ;
float Price ;
float Total_value ;
} ; //最后的分号不可少,这是一条说明语句
关键字class是数据类型说明符,指出下面说明的是类。标识符
CGoods是商品这个类的类型名。花括号中是构成类体的一系列的成员,关键字public是一种访问限定符。
访问限定符(access specifier)有三种:public(公共的),
private(私有的)和protected(保护的)。第一种说
明的成员能从外部进行访问,两种说明的成员不能从外部进行访
问。每种说明符可在类体中使用多次。它们的作用域是从该说明
符出现开始到下一个说明符之前或类体结束之前结束。
如果在类体起始点无访问说明符,系统默认定义为私有(private)。
访问说明符private(私有的)和protected(保护的)体现了类具有封装性(Encapsulation)
定义一个类的一般格式为:
class 类名{
《《private:》
成员表1;》
《public:
成员表2;》
《protected:
成员表3;》
}; //最后的分号不可少;注意:所有说明都有分号
其中“class 类名”称为类头(class head)。花括号中的部分称为类体(class body),类体中定义了类成员表(class member list)。
类定义的更关键部分是对数据成员的操作,用函数来完成:
class CGoods{
private :
char Name[21] ;
int Amount ;
float Price ;
float Total_value ;
public :
void RegisterGoods(char[],int,float); //输入数据
void CountTotal(void) ; //计算商品总价值
void GetName(char[]) ; //读取商品名
int GetAmount(void) ; //读取商品数量
float GetPrice(void) ; //读取商品单价
float GetTotal_value(void) ; }; //读取商品总价值
这样在类中引进了成员函数(member function)或函数成员,也
就是函数也成了数据
(类)中的一员。类把数据(事物的属性)和函数(事物的行为——操作)封装为一个整体。
四个数据成员被说明成私有的,而六个函数成员被说明成公
有的;这就是说如果从外部对四个数据成员进行操作的话,只能通
过六个公有函数来完成,数据受到了良好的保护,不易受副作用的影
响。公有函数集定义了类的接口(interface)。
类是一种数据类型,定义时系统不为类分配存储空间,所以
不能对类的数据成员初始化。类
中的任何数据成员也不能使用关
键字extern、auto或register限定其存储类型。
成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员
前面只对成员函数作了一个声明(函数的原型),并没有对函数进行定义。
函数定义通常在类的说明之后进行,其格式如下:
返回值类型 类名::函数名(参数表)
{……}//函数体
其中运算符“::”称为作用域解析运算符(scope resolution operator),它指出该函数是属于哪一个类的成员函数。
类CGoods的函数定义
对象是类的实例(instance)。声明一种数据类型只是告诉编译系统该数据类型的构造,并没有预定内存。类只是一个样板,以此样板可以在内存中开辟出同样结构的实例——对象。
创建类的对象可以有两种常用方法。
第一种是直接定义类的实例——对象:
CGoods Car; int I;
这个定义创建了CGoods类的一个对象Car,同时为它分配了属于它自己的存储块,用来存放数据和对这些数据实施操作的成员函数(代码)。对象只在定义它的域中有效。
第二种是采用动态创建类的对象的方法,将在第七章中学习。所谓动态指在程序运行时建立对象。而前一种是在编译时(程序运行前)建立。
如果通过使用关键字inline,则系统也会自动采用内联扩展方法实现,这时每个对象都有该函数一份独立的拷贝。如RegisterGoods()函数可定义为:
inline void CGoods::RegisterGoods(char name[] , int amount , float price){
strcpy(Name,name) ; Amount=amount ;
Price=price ;
}
则每个对象都有RegisterGoods()函数一份独立的拷贝。
Inline只是一个建议,最后由编译器决定是否执行。对象的存储方式是物理的,这是由计算机来完成的,它并不影响类在逻辑上的封装性。
对象使用的规则很简单,只要在对象名后加点号(点操作符,成员访问运算符(member access oprator)之一),再加成员数据或成员函数名就可以了。但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。
现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存
声明格式是 class+类名 {
数据成员 +成员函数 } 。 class 是必须的关键词。 对象就是把 “类” 实例化 ,也类似于结构体变量的声明,它的创建格式是 类名+对象名,比如有一个已经定义的类 A ,可以这样把A实例化 A a ; a就是你创建的对象。只有创建了对象,类才能发挥作用。
在C++中,类是一种数据类型。
客观事物是复杂的,要描述它必须从多方面进行,也就是用不同的数据类型来描述不同的方面。如商场中的商品可以这样描述:
商品名称(用字符串描述),该商品数量(用整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。
这里用了属于三种不同数据类型的四个数据成员(data member)来描述一种商品。
在C++中可以这样表述:
class CGoods{
public :
char Name[21] ;
//对于中文可用wchar_t name[11]
int Amount ;
float Price ;
float Total_value ;
} ; //最后的分号不可少,这是一条说明语句
关键字class是数据类型说明符,指出下面说明的是类。标识符
CGoods是商品这个类的类型名。花括号中是构成类体的一系列的成员,关键字public是一种访问限定符。
访问限定符(access specifier)有三种:public(公共的),
private(私有的)和protected(保护的)。第一种说
明的成员能从外部进行访问,两种说明的成员不能从外部进行访
问。每种说明符可在类体中使用多次。它们的作用域是从该说明
符出现开始到下一个说明符之前或类体结束之前结束。
如果在类体起始点无访问说明符,系统默认定义为私有(private)。
访问说明符private(私有的)和protected(保护的)体现了类具有封装性(Encapsulation)
定义一个类的一般格式为:
class 类名{
《《private:》
成员表1;》
《public:
成员表2;》
《protected:
成员表3;》
}; //最后的分号不可少;注意:所有说明都有分号
其中“class 类名”称为类头(class head)。花括号中的部分称为类体(class body),类体中定义了类成员表(class member list)。
类定义的更关键部分是对数据成员的操作,用函数来完成:
class CGoods{
private :
char Name[21] ;
int Amount ;
float Price ;
float Total_value ;
public :
void RegisterGoods(char[],int,float); //输入数据
void CountTotal(void) ; //计算商品总价值
void GetName(char[]) ; //读取商品名
int GetAmount(void) ; //读取商品数量
float GetPrice(void) ; //读取商品单价
float GetTotal_value(void) ; }; //读取商品总价值
这样在类中引进了成员函数(member function)或函数成员,也
就是函数也成了数据
(类)中的一员。类把数据(事物的属性)和函数(事物的行为——操作)封装为一个整体。
四个数据成员被说明成私有的,而六个函数成员被说明成公
有的;这就是说如果从外部对四个数据成员进行操作的话,只能通
过六个公有函数来完成,数据受到了良好的保护,不易受副作用的影
响。公有函数集定义了类的接口(interface)。
类是一种数据类型,定义时系统不为类分配存储空间,所以
不能对类的数据成员初始化。类
中的任何数据成员也不能使用关
键字extern、auto或register限定其存储类型。
成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员
前面只对成员函数作了一个声明(函数的原型),并没有对函数进行定义。
函数定义通常在类的说明之后进行,其格式如下:
返回值类型 类名::函数名(参数表)
{……}//函数体
其中运算符“::”称为作用域解析运算符(scope resolution operator),它指出该函数是属于哪一个类的成员函数。
类CGoods的函数定义
对象是类的实例(instance)。声明一种数据类型只是告诉编译系统该数据类型的构造,并没有预定内存。类只是一个样板,以此样板可以在内存中开辟出同样结构的实例——对象。
创建类的对象可以有两种常用方法。
第一种是直接定义类的实例——对象:
CGoods Car; int I;
这个定义创建了CGoods类的一个对象Car,同时为它分配了属于它自己的存储块,用来存放数据和对这些数据实施操作的成员函数(代码)。对象只在定义它的域中有效。
第二种是采用动态创建类的对象的方法,将在第七章中学习。所谓动态指在程序运行时建立对象。而前一种是在编译时(程序运行前)建立。
如果通过使用关键字inline,则系统也会自动采用内联扩展方法实现,这时每个对象都有该函数一份独立的拷贝。如RegisterGoods()函数可定义为:
inline void CGoods::RegisterGoods(char name[] , int amount , float price){
strcpy(Name,name) ; Amount=amount ;
Price=price ;
}
则每个对象都有RegisterGoods()函数一份独立的拷贝。
Inline只是一个建议,最后由编译器决定是否执行。对象的存储方式是物理的,这是由计算机来完成的,它并不影响类在逻辑上的封装性。
对象使用的规则很简单,只要在对象名后加点号(点操作符,成员访问运算符(member access oprator)之一),再加成员数据或成员函数名就可以了。但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。
现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性