class complex
{
public:
complex (double r = 0, double i = 0)
: re(r), im(i)
{} ----------------------------------------------------------------------- |
complex& operator += (const complex&); //这是一个函数的声明 |---函数若在class body内定义完成,便自动成为inline候选人
double real () const {return re;} ----------------------------------------------------- |
double imag () const {return im;} --------------------------------------------------- |
private:
double re, im;
friend complex& _doapl (complex*, const complex&);
};
{
complex c1(2, 1);
complex c2;
}
//访问级别
class complex
{
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;}
private: //数据类的东西放到private里,进行封装
double re, im;
friend complex& _doapl (complex*, const complex&);
};
//这是对的
{
complex c1(2, 1);
cout << c1.real();
cout << c1.imag();
}
//这是错的
{
complex c1(2, 1);
cout << c1.re;
cout << c1.im;
}
//构造函数
class complex
{
public:
complex (double r = 0, double i = 0) // default argument 默认实参
: re(r), im(i) // initialization list 初值列,初始列
{}
//complex () : re(0), im(0) {} 这样重载是错误的,因为上面的构造函数给出了默认实参,如果有complex c1或是complex c1(),函数不知道该调用谁
complex& operator += (const complex&); //这是一个函数的声明
double real () const {return re;} //如果public内的函数不改变数据内容,记得加const!!!否则如果下面出现const complex c(2, 1); cout c.real(); 编译时不通过的,因为既然class内没有加const,就说明complex.real是可以改变的,但是又用const修饰了c,就代表c.real是不能改变的,编译器很矛盾啊
double imag () const {return im;}
private:
double re, im;
friend complex& _doapl (complex*, const complex&);
};
{
complex c1(2, 1);
complex c2;
}
//构造函数是可以放到private里的,例如下面这个例子
/*
Singleton (单例,单体)
class A{
public:
static A& getInstance();
setup() {...}
private:
A();
A(const A& rhs);
...
};
A& A::getInstance()
{
static A a;
return a;
}