C++类中的各种函数

目录

  • 成员函数
  • 构造函数和析构函数
    • 构造函数
    • 析构函数
  • 虚函数
    • 纯虚函数
  • 友元函数
  • 内联函数

成员函数

  1. 成员函数是定义为类的一部分的函数,有时也被称为方法。

  2. 类的成员函数可以把定义和原型写在类的内部,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

  3. 类的成员函数的定义可以在类的内部,也可以在类的外部。

成员函数定义在类的内部

class Box
{
   public:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
   
      double getVolume(void)
      {
         return length * breadth * height;
      }
};

成员函数定义在类的外部

class Box
{
   public:
      double length;         // 长度
      double breadth;        // 宽度
      double height;         // 高度
      //成员函数的声明
      double getVolume(void);// 返回体积
};

double Box::getVolume(void)
{
    return length * breadth * height;
}

构造函数和析构函数

构造函数

  1. 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

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

不带参数的构造函数示例:

class Book{
	public:
		Book(); //这是构造函数
}
Book::Book(void)
{
	std::cout <<  "The object is created." << std::endl;
}

带参数的构造函数示例:

class Book{
	public:
		int bookNum;
		Book(int num);
}
Book::Book(int num)
{
	bookNum = num; //初始化bookNum
	std::cout <<  "The object is created. bookNum = " << bookNum << std::endl;
}
int main()
{
	Book book(10); //定义一个Book类,并初始化bookNum
}

使用初始化列表来初始化字段

Book::Book(int num):bookNum(num)
{
	//等同于bookNum = num
	std::cout <<  "The object is created. bookNum = " << bookNum << std::endl;
}

析构函数

  1. 类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

  2. 析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

析构函数示例:

class Book{
	public:
		Book(); //这是构造函数
		~Book();//这是析构函数
}
Book::Book(void)
{
	std::cout <<  "The object is created." << std::endl;
}
Book::~Book(void)
{
	//也可以调用相关函数来释放内存,停止服务等等。
	std::cout <<  "The object is deleted." << std::endl;
}

虚函数

  1. 虚函数主要用于基类与派生类。基类中声明,在派生类中具体实现。
  2. 虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
  3. 在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。

纯虚函数

在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。

纯虚函数示例:

class Shape {
   protected:
      int width, height;
   public:
      Shape( int a=0, int b=0)
      {
         width = a;
         height = b;
      }
      // pure virtual function
      virtual int area() = 0;
};

友元函数

  1. 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

  2. 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

  3. 如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend。

友元函数使用示例:

#include 
 
using namespace std;
 
class Box
{
   double width;
public:
   friend void printWidth( Box box );
   void setWidth( double wid );
};
 
// 成员函数定义
void Box::setWidth( double wid )
{
    width = wid;
}
 
// 请注意:printWidth() 不是任何类的成员函数
void printWidth( Box box )
{
   /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */
   cout << "Width of box : " << box.width <<endl;
}
 
// 程序的主函数
int main( )
{
   Box box;
 
   // 使用成员函数设置宽度
   box.setWidth(10.0);
   
   // 使用友元函数输出宽度
   printWidth( box );
 
   return 0;
}

内联函数

  1. 将一个函数指定为内联函数,通常是将它在每个调用点上“内联地”展开。
  2. 如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。
  3. 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。
  4. 如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。
  5. 一般来说,内联机制用于优化规模较小,流程直接,频繁调用的函数。很多编译器都不支持内联递归函数。
  6. 在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。

内联函数示例:

inline int Max(int x, int y)
{
   return (x > y)? x : y;
}

——————
2021.11.03
软件园

你可能感兴趣的:(C与C++,c++,开发语言)