首页 > 编程语言 >C++语言类的详解和示例

C++语言类的详解和示例

时间:2022-11-22 23:05:11浏览次数:58  
标签:函数 示例 成员 C++ char 详解 private public 构造函数


 

超女选秀的例子我们玩了很久,为了教学的需要,暂时离开美眉们,我将采用实际项目开发的例子。

在C语言基础知识中已学习过文件操作,在实际开发中,我会把文件操作封装成一个类,类的声明如下:

       

C++语言类的详解和示例_class

 

类的声明和成员函数的定义都是类定义的一部分,在实际开发中,我们通常将类的声明放在头文件中,而将成员函数的定义放在源文件中。

类成员的访问权限

​C++​​通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是类外面的代码该类中成员权限。

在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。

在类的外部(定义类的代码之外),只能通过对象访问public的成员,不能访问 private、protected 属性的成员。

本节重点介绍 public 和 private,protected 将在以后介绍。

private 后面的成员都是私有的,如m_fp和m_bEnBuffer,直到有 public 出现才会变成共有的;public 之后再无其他限定符,所以 public 后面的成员都是共有的。

private 关键字的作用在于更好地隐藏类的内部实现,该向外暴露的接口(能通过对象访问的成员)都声明为 public,不希望外部知道、或者只在类内部使用的、或者对外部没有影响的成员,都建议声明为 private。

声明为 private 的成员和声明为 public 的成员的次序任意,既可以先出现 private 部分,也可以先出现 public 部分。如果既不写 private 也不写 public,就默认为 private。

在一个类体中,private 和 public 可以分别出现多次。每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止。

你可能会说,将成员变量全部设置为 public 省事,确实,这样做 99.9% 的情况下都不是一种错误,我也不认为这样做有什么不妥;但是,将成员变量设置为 private 是一种软件设计规范,尤其是在大中型项目中,还是请大家尽量遵守这一原则。

成员变量的命名

成员变量大都以m_开头,这是约定成俗的写法,不是语法规定的内容。以m_开头既可以一眼看出这是成员变量,又可以和成员函数中的参数名字区分开。

例如成员函数EnBuffer的函数体如下:

       

C++语言类的详解和示例_类_02

 

构造函数

在CFile类的声明中,有一个特殊的成员函数CFile(),它就是构造函数(constructor)。

     

C++语言类的详解和示例_对象_03


构造函数的名字和类名相同,没有返回值,不能被显式的调用,而是在创建对象时自动执行。

构造函数具备以下特点:

构造函数必须是 public 属性。

构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许。

构造函数可以有参数,允许重载。一个类可以有多个重载的构造函数,创建对象时根据传递的参数来判断调用哪一个构造函数。但是,在实际开发中,我很少重载构造函数,一是程序写出来不漂亮,二是构造函数不能有返回值,能做的事情很有限,让其它的成员函数去做就是了。

构造函数在实际开发中会大量使用,它往往用来做一些初始化工作,对成员变量进行初始化等,我基本上就是这么用的。

       

C++语言类的详解和示例_class_04

 

析构函数

在CFile类的声明中,还有一个特殊的成员函数~CFile(),它就是析构函数(destructor)。

     

C++语言类的详解和示例_对象_05


析构函数的名字在类的名字前加~,没有返回值,但可以被显式的调用,在对象销毁时自动执行,用于进行清理工作,例如释放分配的内存、关闭打开的文件等,这个用途非常重要,可以防止程序员犯错。

析构函数具备以下特点:

构造函数必须是 public 属性的。

构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许。

析构函数不允许重载的。一个类只能有一个析构函数。

       

C++语言类的详解和示例_对象_06


 

C++程序也很优雅

很多人说C++程序很烦锁,python程序很优雅,说这话人的很荒谬,那是因为他C++的功力不够。

       示例(book210.cpp)

       

C++语言类的详解和示例_类_07

类的其它知识

关于类的其它知识,包括this指针、static静态成员、友元等内容,我不介绍了,大家可以找资料看看,也可以不看,意义不大,时间太宝贵,有太多重要的知识要学习,没必要把时间浪费在这些不痛不痒又没什么用的知识点上,以后有时间了再看也行。

可变参数

我们已经介绍过printf、fprintf、sprintf、snprintf函数,它们是一组功能相似的函数,并且有一个共同点,就是函数的参数列表是可变的。

函数的声明如下:

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);

在实际开发中,我们的自定义函数也需要可变参数,实现类似上述函数的功能,例如CFile类的Fprintf成员函数,函数的声明和定义如下:

       

C++语言类的详解和示例_类_08

 

va_list指针、va_start宏、va_end宏难以理解,大家会抄就行,我不详细介绍,vfprintf函数把宏分析的结果输出到文件,还有一系列功能相似的函数,声明如下:

// 输出的屏幕

int vprintf(const char *format, va_list ap);

// 输出到文件

int vfprintf(FILE *stream, const char *format, va_list ap);

// 输出到字符串

int vsprintf(char *str, const char *format, va_list ap);

// 输出到字符串,第二个参数指定了输出结果的长度,类似snprintf函数。

int vsnprintf(char *str, size_t size, const char *format, va_list ap);

可变参数的知识不只这些,但是,在实际开发中,我只见过用于格式化输出,其它的应用场景我没有见过。

 

版权声明

作者:码农有道

如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

标签:函数,示例,成员,C++,char,详解,private,public,构造函数
From: https://blog.51cto.com/u_13748800/5878704

相关文章

  • C++语言引用的介绍和示例
         对于习惯使用C进行开发的程序员来说,在看到C++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中,它除了取地址,还有其它的用途,叫做引用......
  • C++语言string类介绍和示例
    在C语言中,用0结尾的字符数组表示字符串,C的字符串有一个问题,就是定义后大小不能改变,存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这个问题让程序员很郁闷......
  • C++语言类和对象介绍和示例
     C++类和对象C语言中结构体(struct)是一种构造类型,可以包含若干成员变量,可以通过结构体来定义结构体变量。C++中的类(class)可以看成结构体的升级版,类也是一种构造类型,但是进......
  • C++语言函数重载详解和示例
     C++函数重载的概念在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如把变量的值写入文件,变量的类型int、long、double、char,需要通过参数把变量......
  • 从C语言到C++语言
      ​​C++​​​ 读作“C加加”,是“CPlusPlus”的简称。顾名思义,C++是在​​C语言​​的基础上增加新特性。从语法上看,C语言是C++的一部分,C语言代码几乎不用修改就......
  • C/C++语言学习的策略
    断章取义C语言出现50年了,有很多内容已过时,至少有百分之二十的内容没有实用价值。C++更过份,对程序员来说,至少有百分之七十的内容没有实用价值。Linux系统也是,命令上千个,对程......
  • C/C++程序员如何学习英语
       英语是程序员的重要技能,有多重要?比较重要,极其重要吗?也不一定。    我是高中毕业,在刚开始学习计算机的一两年,曾经买过许国璋英语四级和计算机英文方面的书籍......
  • C++学习笔记--引用与返回值
    //#include<iostream>//usingnamespacestd;////int&fun()//注意类型要保持一致//{// inta=12;//不能引用局部变量// returna;//}////intmain()//{// in......
  • C++学习笔记——交换
    //#include<iostream>//usingnamespacestd;//voidswap(int&a1,int&b1)//该情况下,将主函数中的a和b分别传递给了a1和b1,在引用的作用下,a和a1,b和b1分别共用一个空间,......
  • C++学习笔记——类
    //#include<iostream>//usingnamespacestd;////classFirst//在C++中,struck结构体是一个特殊的类////在类中,默认的访问修饰符为pr......