21xrx.com
2024-11-22 08:12:49 Friday
登录
文章检索 我的文章 写文章
C++成员函数使用以及修饰符
2023-07-05 09:36:48 深夜i     --     --
C++ 成员函数 使用 修饰符 const static virtual override

C++是一种对象导向编程语言,其中类是对象的基本构建块。类中有成员函数和成员变量,成员函数是方法,用于处理或操作类的数据。本篇文章将探讨C++成员函数的使用和修饰符。

C++成员函数的使用

成员函数是与一个特定类相关联的函数,在类中定义以执行特定的任务。定义一个成员函数与定义一个普通的函数类似,唯一的区别是在函数名前面加上类名和作用域操作符“::”。

下面是一个简单的例子,解释了如何定义和调用一个成员函数:


#include <iostream>

class Rectangle {

 int width, height;

 public:

  void set_values (int,int);

  int area() {return width*height;}

};

void Rectangle::set_values (int x, int y)

 width = x;

 height = y;

int main () {

 Rectangle rect;

 rect.set_values (3,4);

 std::cout << "area: " << rect.area();

 return 0;

}

在上面的代码中,我们定义了一个名为Rectangle的类,它有两个私有变量width和height,并定义了一个成员函数set_values()。set_values()函数获取两个参数x和y,并分别赋值给width和height成员变量。

在主函数中,我们创建了一个Rectangle类型的对象rect,调用set_values()函数为其分配了值,最后调用area()函数计算面积并打印结果。

C++成员函数修饰符

修饰符是指定成员函数如何访问和在适当时候调用的一种能力。C++中有三种成员函数修饰符:

1. const - 表明函数不会修改类中的任何成员变量

2. volatile - 表明在函数执行期间某些可能被修改的变量并不需要进行编译器优化

3. static - 将函数与类的实例解耦

下面是修饰符的详细描述:

1. const修饰符

const修饰符告诉编译器,该函数不会尝试修改类中的任何成员变量,以确保调用函数的代码不能修改这些变量。如果在紧急情况下确实需要修改变量的话,可以声明成员函数为mutable。下面的示例演示了const修饰符的使用:


#include <iostream>

class Rectangle {

 int width, height;

 public:

  void set_values (int, int);

  int area() const {return width*height;}

};

void Rectangle::set_values (int x, int y)

 width = x;

 height = y;

int main () {

 const Rectangle rect; // rect是一个const对象,只能调用const成员函数

 rect.set_values (3,4); // ERROR

 std::cout << "area: " << rect.area();

 return 0;

}

在上面的代码中,我们在area()函数的后面添加了const关键字。这告诉编译器,area()函数在执行期间不会修改任何成员变量。因此,我们可以在创建const对象后调用area()函数。

2. volatile修饰符

volatile修饰符告诉编译器,指定的变量的值在函数执行期间可能会被修改,因此编译器无法对这些变量进行优化。下面的示例演示了volatile修饰符的使用:


#include <iostream>

class Counter {

 volatile int value;

 public:

  Counter() : value(0) {}

  int getValue() const return this->value;

  void increment() { ++value; }

};

int main () {

 Counter count;

 while (count.getValue() < 10) {

  std::cout << count.getValue() << ' ';

  count.increment();

 }

 std::cout << std::endl;

 return 0;

}

在上面的代码中,我们定义了一个Counter类,并声明成员变量value为volatile。这告诉编译器,value值可能会在执行期间被修改,所以不能对其进行优化。

3. static修饰符

static修饰符告诉编译器,将函数与类的实例解耦。这意味着我们可以对该函数进行单独的调用,而不是在对象上调用。下面是一个示例:


#include <iostream>

class Rectangle {

 int width, height;

 public:

  static int numRectangles;

  Rectangle (int x, int y) : width(x), height(y) { numRectangles++; }

  Rectangle () { numRectangles++; }

  int area () { return width * height; }

};

int Rectangle::numRectangles = 0;

int main () {

 Rectangle rect(3,4);

 Rectangle rectb(5,6);

 std::cout << "Total number of rectangles: ";

 std::cout << rect.numRectangles << std::endl;

 return 0;

}

在上面的代码中,我们定义了一个名为numRectangles的静态变量,用于记录类的实例数量。在类定义中,我们将numRectangles声明为一个静态变量,在类的构造函数中自增。

在主函数中,我们创建了两个Rectangle对象,并访问了静态变量numRectangles。由于numRectangles是静态的,因此不必使用对象进行访问。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复