先上自己的关于类的小代码:
#include <iostream>
using namespace std;
class complex
{
private:
int re;
int im;
public:
complex(int r ,int i );
~complex();
inline int real() const { return re;}
inline int imag() const { return im;}
};
complex::complex(int r ,int i )
: re (r),im (i)
{
}
complex::~complex()
{
}
ostream & operator<<(ostream &os,complex &n)
{
os << n.real() << "+" << n.imag() << "i";
return os;
}
main()
{
complex a(4,5);
cout << a << endl;
return 0;
}
内联函数:inline,给编译器建议将函数设置为内联函数,是否设置为内联函数由编译器决定。所谓内联函数就是在编译程序时,如果编译到内联函数,编译器会将函数的内容替代原函数,这样在执行程序时,直接就执行了语句,而不是调用函数。这样做的好处是,调用函数的代价很大,如果函数的内容很简单,就没有必要使用函数来封装,但是使用函数在编写程序时会很方便。此时使用内联函数就恰到好处。
构造函数初始化列表:17行与19行20行注释到的部分之间的区别在于,17行是对变量的初始化,19行20行是对变量的赋值。初始化的效率要优于赋值的效率,所以C++ 程序中尽量使用初始化列表。而且一些对象必须先初始化再来使用的情况,就必须写在初始化列表里。(这中情况之后再来讨论)
操作符的重载:操作符的重载主要分为成员函数,和非成员函数。这里写的是非成员函数,这样的操作符就好比是一种函数,函数的第一个形参就是操作符左边的对象,函数的第二个形参就是操作符右边的对象。对于成员函数来说情况不同,之后再来探讨。
public与private:private中的成员函数和成员变量只能被public中的成员函数调用。例如上述程序中,如果想取到类中re这个成员变量,a.re,这样写是错误的,a.real(),这样写就是正确的。private很好的保护了类中成员变量的安全性,所以对于重要的成员变量最好设为private.