C++ 类中的函数

友元函数

类的访问修饰符

友元函数

#include <iostream>

using namespace std;

class Test {
public:
    Test(int n, double d) :
      n(n), d(d)
    { }

  // 声明主函数为友元函数,说到底主函数也是函数
  friend int main();
  // 声明一般函数为友元函数,用法与其他函数一样,只是需要在类内声明一下
  friend int getInt();
  // 带有形参的友元函数
  friend double getDou(Test t);
  // 类内声明友元类,类内所有成员对友元类都是可见的
  friend class A;

protected:
  double d;

private:
  int n;
};

class A {
public:
  void show() {
    Test test(2, 5.5);
    cout << "class A: " << test.d << " " << test.n << endl;
  }
};

int getInt() {
  Test test(10, 3.4);
  return test.n;
}

double getDou(Test t) {
  return t.d;
}

int main() {
  Test test(2, 1.2);
  cout << "friend main:" << test.d << " " << test.n << endl;
  cout << "friend getDou: " << getDou(test) << endl;
  cout << "friend getInt: " << getInt() << endl;
  A a;
  a.show();
  system("pause");
  return 0;
}

注意

常函数

#include <iostream>

using namespace std;

class Test {
public:
  Test(int n, double d)
    : n(n), d(d)
  { }

  void show() {
    cout << "show func:" << ++n << endl;    // 非常函数可以正常修改类的数据成员
  }

  void func1() const {
    int i1 = 0;
    cout << "const func1: " << ++i1 << endl; // 常函数可以修改函数体内定义的变量
    cout << "const func1: " << ++n << endl;  // 报错,不可以修改
  }

  void func2() const;

private:
  int n;
  double d;
};

void Test::func2() const {
  int i2 = 0;
  cout << "const func2: " << ++i2 << endl; // 常函数可以修改函数体内定义的变量
  cout << "const func2: " << n << endl;    // 报错,不可以修改
}

int main() {
  Test test(10, 3.4);   // 实例化一个普通对象,可以调用常函数和非 常函数
  test.show();
  test.func1();
  test.func2();

  const Test t(2, 3.5); // 实例化一个常对象,只能调用常函数
  t.show(); // 报错,不能调用非常函数
  t.func1();
  t.func2();
  system("pause");
  return 0;
}
class Test {
public:
  Test() : n(2) {
  }

  void show() {
    cout << "non-const: " << n << endl;
  }

  void show() const {
    cout << "const: " << n << endl;
  }

private:
  int n;
};

Test t;
t.show();
const Test ct;
ct.show();

// 运行结果:
// non-const: 2
// const: 2

内联函数

内联函数和常规函数的区别

如何选择是否用内联函数

注意

Table of Contents