C++面向对象高级编程

C++面向对象高级编程

概览

#ifndef COMPLEX_H_
#define COMPLEX_H_

class complex{
private:
  double re, im;
public:
  complex (double r = 0, double i = 0) : re (r), im (i) {} // 构造函数
  complex& operator += (const complex&); // 函数声明
  double real () const {return re;}
  double imag () const {return im;}

  friend complex& _doap1 (complex*, const complex&);

};

#endif // COMPLEX_H_

内联函数 (inline)

函数如果在class body中定义完成,那么就会成为incline函数候选者


  double real () const {return re;}
  • inline 只适用于函数体内代码简单的函数,不能包含复杂的结构控制语句,如while、switch,并且内联函数本身不能是递归函数
  • inline函数仅仅是对编译器的建议,最后能否真正的内联,决定在编译器。
  • inline关键字必须与函数定义体放在一起才能使函数成为内联。仅将inline放在函数声明前,不起任何作用。

建议:因为上一条的原因,最好将内联函数的定义放在头文件里。

访问级别

  • public 部分调用函数 默认 (这是与struct 最大的不同 struct 是public的)
  • private 所有的数据 内部使用的函数
  • protect 子类可用

构造函数

  complex (double r = 0, double i = 0)  // 默认实参
  : re (r), im (i)  // initialization list 这种写法更高效 这里是初始化 后面是赋值
  {
  
  } // 构造函数
  • 与类名相同
  • 没有返回值
  • 可以有多个(重载)
  • 创建对象时自动调用
int main() {
  complex c1(2, 1);
  complex c2;
  complex *p = new complex(4);
}

析构函数

不带指针的类大部分不需要析构函数

将构造函数放到 private 区域中

  • 单例模式
class A {
public:
  static A& getInstance();
 void  setup();

private:
  A();
  A(const A& rhs);
};

  A& A::getInstance() {
  static A a;
  return a;
}

A::getInstance.setup();

const

不改变类内的数据的时候,应该+ const

  double real () const {return re;}
  double imag () const {return im;}

如果不加 const 的话

  double real () {return re;}
  double imag () {return im;}

如果使用者这样使用

int main() {
  const complex c(2, 1);
  cout << c.reaol();
  cout << c.imag();
}

就会这样报错

main.cpp: 在函数‘int main(int, char**)’中:
main.cpp:8:18: 错误:passing ‘const complex’ as ‘this’ argument discards qualifiers [$
rg/onlinedocs/gcc/Warning-Options.html#index-fpermissive-fpermissive]
    8 |   cout << c1.real();
      |           ~~~~~~~^~
In file included from main.cpp:2:
complex.h:12:10: 附注:在调用‘double complex::real()’时
   12 |   double real () {
   return re;}
      |          ^~~~

参数传递

  • 值传递
    尽量不要传递值

  • 引用传递
    传引用相当于传指针,但是更加优雅

complex& complex::operator += (const complex& x);

 
 

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