程序基石系列之类的声明Class declaration

本节主要阐述用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 default
private:
      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 setAge
void Person::setAge(unsigned n){
    age =n;
}
//define Person's getAge
void 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 setAge
void Person::setAge(unsigned n){
    age =n;
}
//define Person's getAge
void Person::getAge( ) const{
    return age;
}


关于程序设计基石与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

你可能感兴趣的:(【Thinking,C/C++】,程序设计基石与实践)