C++是在C语言的基础上进行发展,最大的不同便是C++支持面向对象程序设计。可以这么说,类是C++的核心特征,那么怎么去理解“类”呢?

一、类的定义

    定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。

    类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。例如,我们使用关键字 class 定义 Student 数据类型,如下所示:

class Student
{
   public:     
     string name;   // 学生的姓名
     int    math;  // 数学成绩
     int    computer; // 信息技术成绩
}

    关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。

    当然其他的修饰词还有private或是protected等。

二、定义C++对象

    类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。下面的语句声明了类 Student 的两个对象:

Student student1;          // 声明 Student,类型为 Student
Student student2;          // 声明 Student,类型为 Box

    两个对象均有自己的数据成员

    那么如何对数据成员进行访问呢?一般是通过(.)来访问。如下面的例子:

#include <iostream>
using namespace std; 
class Student
{
   public:     
     string name;   // 学生的姓名
     int    math;  // 数学成绩
     int    computer; // 信息技术成绩
}
int main( )
{
   Student    student1 ;// 声明 student1,类型为student
   Student    student2; // 声明 student2,类型为student
   double volume = 0.0;     // 用于存储体积
 
   // student 1 详述
   student1.name = "jack"; 
   student1.math = 90; 
  
   // student 2 详述
      student2.name  = "lilin"
    student2.math  =92;
   return 0;
}

三、有关类的其他相关概念

    类成员函数简单的说就是在类里面定义的函数,如:

class Student
{
   public:     
     string name;   // 学生的姓名
     int    math;  // 数学成绩
     int    computer; // 信息技术成绩
     
     int getmath(void)
     {
         return name;
     }
}

    当然还有一种情况时在类外定义的,需要使用范围解析运算符::定义函数,例如:

class Box
{
   public:     
     string name;   // 学生的姓名
     int    math;  // 数学成绩
     int    computer; // 信息技术成绩
     //声明
     int getmath(void);
}
//定义
int Student::getname(void)
{
    retuen name;
}

    特别的,如果需要对成员函数进行引用,则需要使用(.),如下

Student student1;
student1.getname();

    类访问修饰符:

    关键字 public、private、protected 称为访问修饰符。

    一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private

    公有成员在程序中类的外部是可访问的。

    私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。默认情况下类的所有成员都是私有的。

    一般情况下载私有区域定义数据,在公有区域定义函数。

    保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。

    

    类的构造函数:

    构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

    实例:

#include <iostream>
 using namespace std; 
class Line
{
   public:      
    void setLength( double len );      
    double getLength( void );      
    Line();  // 这是构造函数
 
   private:     
     double length;
}; 
// 成员函数定义,包括构造函数
Line::Line(void)
{
    cout << "Object is being created" << endl;
}
void Line::setLength( double len )
{
    length = len;
}
double Line::getLength( void )
{
    return length;
}

// 程序的主函数
int main( )
{
   Line line; 
   // 设置长度
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl; 
   return 0;
}
在执行后,会产生以下结果:
Object is being created
Length of line : 6

拓展:有可带参数的构造函数,创建对象时就会给对象赋值,例如上面的 Line line(10.0),当然需要重写line函数

    类的析构函数:

    和构造函数相类似,有一种叫析构函数。他的名称也和类的名称完全相同,只不过在前面加了个波浪号(~),他不会返回任何值,也不带有任何参数。

    析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。因为他会在它会在每次删除所创建的对象时执行。

    如下:

#include <iostream>
 using namespace std; 
class Line
{
   public:      
   void setLength( double len );      
   double getLength( void );      
   Line();   // 这是构造函数声明
      
   ~Line();  // 这是析构函数声明
 
   private:     
    double length;
}; 
// 成员函数定义,包括构造函数
Line::Line(void)
{
    cout << "Object is being created" << endl;
}
Line::~Line(void)
{
    cout << "Object is being deleted" << endl;
}
 void Line::setLength( double len )
{
    length = len;
}
 double Line::getLength( void )
{
    return length;
}
// 程序的主函数
int main( )
{
   Line line; 
   // 设置长度
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl; 
   return 0;
}
当上述程序执行时,会产生以下结果:
Object is being created
Length of line : 6
Object is being deleted