程序基石系列之类的声明Class declaration
来源:互联网 发布:python scikit learn 编辑:程序博客网 时间:2024/04/29 19:55
本节主要阐述用C++语言进行面向对象程序设计的基础内容。无论使用什么语言进行面向对象程序设计都是从类的设计开始。因些,我们学习C++中声明一个类的语法。
类声明
在C++中,一个类就是一种数据。通过创建自己的类,可以对C++语言进行扩展。通过类声明可以创建一个类,而且可将这个类当做数据类型来使用。类声明描述了封装在灯中的数据成员和成员函数。
class Human{ //....data members and method go here};在上述声明中,class是个关键字,其后上Human有时称为类标签,这个标签就是数据的标识/名字。
C++的信息隐藏机制
C++的关键字private可以用来隐藏类的数据成员和成员函数,关键public 可以用来暴露的数据成员和成员函数。面向对象设计的灵魂就是使用private隐参类实现,使用public暴露类的接口。
class Person( ){ public: void setAge(unsigned n); unsigned getAge() const; private: unsigned age;};上述了是创建了一个Person类,它的接中包含两个公有成员函数setAge 和getAge。它的实现则由一个unsigned 类型的数据成员age组成。关键字 public 和 private后面紧跟一个冒号:。在getAge的声明中出现了关键字const用来表示getAge不会修Person类的任何数据成员值。
关键字class和struct区别
使用class或struct关键字都可以创建类。如果使用class关键字,类成员在默认状态是私有的;而使用struct关键字,类成员在默认状态是公有的。
class Ex{ int x; // private by default private: void setX(int X); //public};等价于声明
struct Ex{ void setX(int X); //public by defaultprivate: int x; // private };
类成员函数的定义
前面那些例子使用了类声明:
class Person( ){ public: void setAge(unsigned n); unsigned getAge() const; private: unsigned age;};这个声明对setAge 和getaAge进行了声明,但是没有给出定义。有两种途径可以完成类成员函数的定义。
- 成员函数的声明在类声明之中进行,但在类声明之外定义。
- 成员函数的定义也在类声明这中进行,我们称这种定义方式为inline,C++关键字inline专门用来表法内联。内联定义方式同是提供了成员函数的声明和定义。
下面我们用两个例子来叙述两种定义方式的区别。
class Person( ){ public: void setAge(unsigned n); unsigned getAge() const; private: unsigned age;};//define Person's setAgevoid Person::setAge(unsigned n){ age =n;}//define Person's getAgevoid Person::getAge( ) const{ return age;}在类声明这中声明了Person类的各种成员函数,然后在类的声明之外定义这些函数,在定义成员函数时使用了域解析符::,因其他的类也可能分使用setAge和getAge作为函数名,包括一些顶层函数。
内联函数通知编译器用成员函数的函数体替换掉所有对此函数进行调用的代码,这样在替换后的代码中不再出现对这个函数进行调用的代码。通过在进行成员函数声明的时候使用inline关键字,可将原本定义在类声明之外的成员函数强制变成内联函数。
class Person( ){ public: inline void setAge(unsigned n); inline unsigned getAge() const; private: unsigned age;};//define Person's setAgevoid Person::setAge(unsigned n){ age =n;}//define Person's getAgevoid Person::getAge( ) const{ return age;}
关于程序设计基石与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.
- 程序基石系列之类的声明Class declaration
- 反射的基石--Class
- 程序基石系列之C++多态的前提条件
- 反射的基石:class类
- 反射的基石->Class类
- 反射的基石Class类
- Class类--反射的基石
- c++之类的前置声明
- c++ 之类的前置声明
- c++ 之类的前置声明
- c++ 之类的前置声明
- c++ 之类的前置声明
- c++ 之类的前置声明
- C++之类的前置声明
- c++ 之类的前置声明
- c++ 之类的前置声明
- c++之类的前置声明
- c++ 之类的前置声明
- web.xml中load-on-startup的作用
- 书:计算机网络高级软件编程技术(P88) 之 基础训练:路由追踪程序的实现(tracert程序)
- OCP-1Z0-052-V8.02-179题
- SVN 重定向
- python xmlrpc 服务端返回慢的解决方案
- 程序基石系列之类的声明Class declaration
- 安卓自测试题——第十五期
- PHP的构造方法,析构方法和this关键字
- Windows服务简介
- PyScripter 错误 UnicodeEncodeError:'ascii' codec can't encode characters in position 1-2
- android 选取图片部分显示(验证码)
- node.js 的crypto模块用来加密
- cocos2d-x总结(六) cocos2d-x与ISO内存管理
- jQuery-----效果