C++面向对象高级编程(侯捷)—— 10.扩展补充:类模板,函数模板,及其他

static 静态

  • 类中的static成员和成员函数一样,都只有一份
  • 但是该成员函数处理的哪个对象,靠this pointer来确定
  • complex c1; 
    cout << c1.real(); 相当于c中的 cout << complex::real ( &c1 ); 
  • 加了static的成员变量:和对象就脱离了;所有对象的该数据都一样,就弄成静态的;
  • 加了static的成员函数:静态函数没有this pointer,所以不可以处理对象中的东西,也就是非静态的成员变量;只能处理静态成员变量。
class Account {
public:
    static double m_rate; // 只是声明
    static void set_rate(const double& x) { m_rate = x; }
};
double Account::m_rate = 8.0; // 定义:使其获得内存

int main() {
    // 调用static函数的两个方式:
    Account::set_rate(5.0); // 1.通过class name 调用
    Account a;
    a.set_rate(7.0); // 2.通过object调用
}

把ctor放在private区

  • Singleton设计模式:希望该类只产生一个对象
class A {
public:
    static A& getInstance() { return a; }
    setup() {...}
private:
    A();
    A(const A& rhs);
    static A a;
    ...
};

A::getInstance().setup();
  • 升级版本:只有当有人调用getInstance的时候,才会分配空间,但是离开函数以后,依然存在。 
class A {
public:
    static A& getInstance() { 
        static A a;
        return a; 
    }
    setup() {...}
private:
    A();
    A(const A& rhs);
};

A::getInstance().setup();

cout

class template 类模板 template<typename T>

  • 模板那会造成代码膨胀,但是是必要的;

 function template 函数模板 template<class T>

namespace 命名空间

 

更多细节

  • operator type() const; 比如分数的类,变成double
  • explicit complex(…) : initialization list { }
  • pointer-like object
  • function-like object
  • template specialization
  • Standard Library
  • variadic template (since C++11)
  • move ctor (since C++11)
  • Rvalue reference (since C++11)
  • auto (since C++11)
  • lambda (since C++11)
  • range-base for loop (since C++11)
  • unordered containers (Since C++)
  • (关于C++11的新特性,将再写一个博客讨论)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值