【c++笔记(五)侯捷老师课程】补充:类模板,函数模板,及其他

该博客围绕 C++ 展开,介绍了 static 静态数据和函数,指出静态函数无 this pointer 只能处理静态数据;阐述单例模式,将构造函数放 private 并优化创建时机;剖析 cout 源码,还讲解了类模板和函数模板,以及命名空间等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、static

1.静态数据  static data members

2.静态函数  static member funcitons 

  静态函数没有 this pointer,只能处理静态数据

 非静态成员函数有this pointer,参数列表省略,对象调用时,对象地址赋给this。函数返回时,编译器会自动加上this->

3.例子,银行利率的存取

   (1)静态数据必须在body之外给它一个定义,有无初值都可以。

   (2)调用静态数据的方式有2种:

            通过对象object调用

            通过class name 调用

class Account{
public:
	static double m_rate;//只是声明而已
	static void set_rate(const double& x) { m_rate = x;}
}; 
double Account::m_rate = 8.0;//定义,设初值,使这个变量获得内存。
                            //静态数据必须在类的body之外写这条,给不给初值都可以。
int main(){
	Account::set_rate(5.0);//通过class name 调用
	Account a;           
	a.set_rate(7.0);  //通过object调用
}

二、把构造函数ctors放入private(单例模式)

诉求:设计的class,只希望产生一个对象

外界取得唯一的a,然后调用别的函数对a进行操作: A::getInstance.setup();

class A{
public:
	static A& getInstance { return a; }; //外界取得唯一的a,对外的唯一窗口
	setup() {...}
private:
	A();
	A(const A& rhs); //两个构造函数
	static A a;  //不想让别人创建a,所以把构造函数放入private
	...
};

问题:外界若不调用a,但a仍存在于内存中

优化措施:把静态的自己放入对外的唯一接口中(即getInstance函数中)

好处:只有当被调用时,a才会被创建,离开函数之后,a还在(因为是静态的)

class A{
public:
	static A& getInstance { return a; };
	setup() {...}
private:
	A();
	A(const A& rhs);
	...
};
A& A::getInstance()
{
	static A a;
	return a;
}

三、cout源码剖析

四、模板

1. class template 类模板

复数的实部虚部可能是double,int等等,这部分用T表现

template<typename T>// 目前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* , complex&); 
}
{
   complex<double> c1(2.5,1.5); //将class中的所有T用double代替
   complex<int>(2,1); //将class中的所有T用int代替
}

2. function template 函数模板

例:取最小值函数,可以应用于很多个类中

五、命名空间namespace

六、更多细节深入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值