C++学习笔记(6)—— static,类模板,函数模板及namespace

C++学习笔记(6)—— static,类模板,函数模板及namespace,第1张

static 静态

用法:在数据/函数前面 加 static

同一个函数可以处理不同的数据对象,靠的是this pointer。每个成员函数都会自动传入this pointer(不用自己写出来),黄色部分可写可不写(编译器会自己加)。

加了static的数据与对象脱离,不属于对象,内存会单独开一个区域,只有一份。静态数据一定要在Class的外面加一行定义(初始化、声明)。

加了static的函数,静态函数没有this pointer,不能像其他成员函数那样处理对象,只能处理静态数据。

调用static函数的方式有两种:
1. 通过对象调用            //a.set_rate(7.0);
2. 用过类名称调用        //Account::set_rate(5.0);

把构造函数ctors放在private

//Singleton设计模式
class A {
public:
    static A& getInstance( return a; );  //让外界能够访问到a
    set up () {...}
private:
    A();
    A(const A& rhs);        //两个构造函数都私有,那么外面没人能调用他们
    static A a;             //在private里放一个自己类型(A)的静态a;意味着已经存在一个A
    ...
};
A::getInstance() .setup();   //调用

问题:没人调用 a一直存在
改进:放进函数里,有人调用才会创建,离开函数依然存在

//Singleton设计模式
class A {
public:
    static A& getInstance( return a; );  //让外界能够访问到a
    set up () {...}
private:
    A();
    A(const A& rhs);        //两个构造函数都私有,那么外面没人能调用他们
    ...
};

A& A::getInstance()
{
    static A a;
    return a;
}
模板 class template

在类定义前 加 template
calss c1(); 

编译器看到不同的T,会得到不用的一段代码(或许会造成代码的膨胀)

 函数模板

 编译器自动将T变为stone,并且去找有无stone::operator<这个操作符重载

 namespace

避免同名,在std里的就不用写全名了

namespace std
{
...
}

using std::cout   // using declaration

 其他细节:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存