C++学习笔记
提示:本笔记是个人学习侯捷C++课程的总结笔记,欢迎来信指正批评!
提示:以下是本篇文章正文内容,下面案例可供参考
一、成员函数本质
class complex
{
public:
double real() const
{return this->re;}
private:
double re,im;
};
complex c1,c2,c3;
cout<<c1.real();
cout<<c2.real();
/*其原理为*/
cout<<complex::real(&c1); /*&c1、&c2就是成员函数的this指针*/
cout<<complex::real(&c2);
静态数据是所有对象公用data,静态函数没有this指针。
二、static
class Account{
public:
static double m_rate;
/*静态函数无this指针,故处理数据时只能处理静态数据*/
static void set_rate(const double& x) { m_rate=x; }
};
/*给静态变量赋初值*/
double Account::m_rate=8.0;
int main(){
Account::set_rate(5.0); /*通过class name调用函数*/
Account a;
a.set_rate(7.0); /*通过对象object调用static函数*/
/*静态函数不会用this指针,不会有对象地址*/
}
静态函数无this指针,故处理数据时只能处理静态数据
三、设计模式Singleton
单体设计模式:只希望某个类有一个对象,外界无法创建。
class A{
public:
/*外界通过函数获得唯一对象a*/
static A& getInstance( return a; );
setup() { …… }
private:
/*不希望外界创造该对象,构造函数写成空*/
A();
A(const A& rhs);
/*静态构造对象a*/
static A a;
……
};
四、模板
1.class template
template<typename T>
class complex
{
public:
complex(T r=0,T i=0): re(r), im(i) {}
complex& operator += (const complex&);
T real () const {return re;}
T imag () const {return im;}
private:
T re,im;
friend complex& __doapl (complex*,const complex&);
};
{
complex<double> c1(2.5,1.5);
complex<int> c2(2,6);
};
2.function template
编译器会对function template进行引数推导
template <class T>
inline const T& min(const T& a,const T& b)
{
return b<a ? b:a;
}
/*系统当判断到b<a时会调用b的类型定义中的操作符重载*/
五、namespace
namespace std
{
……
]
using namespace std; /*using directive*/
using std::cout; /*using declaration*/