C++面向对象高级编程(上) 第二周笔记 GeekBand

static:

(1)static成员数据:例如像银行IT系统中的利率,并不是每个用户拥有一份,而是所有账户都有统一的利率,可以加static,表明所有账户共有相同利率。

static成员数据要在class外定义。

例:class Account{

public:

static double m_rate;

static void set_rate(const double& x){m_rate=x;}

}

double Account::m_rate=8.0;

(2)static成员函数:没有this pointer。只能处理static类型的成员数据。

调用static函数的方式:

a.通过object调用,和普通成员函数一样。例如;

Account a;

a.set_rate(7.0);

b.通过class name调用,例如:

Account::set_rate(5.0);

单例模式:

class A{

public:

static A& getInstance(){return a;};

setup(){...}

private:

A();

static A a;

}

调用函数setup方式:A::getInstance().setup();

缺点:如果没有用到类A的唯一对象a,由于a在创建类是就存在并一直存在,将造成内存空间的浪费。

更好的写法:

class A{

public:

static A& getInstance();

setup(){...}

private:

A();

}

A& A::getInstance(){

static A a;

return a;

}

调用函数setup方式:A::getInstance().setup();

调用getInstance后a一直存在。

namespace:

(1)using namespace std;

cout<<...

cin>>...

(2)using std::cout;

cout<<...

(2)std::cout<<...

时间: 2024-08-06 23:32:24

C++面向对象高级编程(上) 第二周笔记 GeekBand的相关文章

C++面向对象高级编程(下) 第二周笔记 GeekBand

1.vptr和vtbl 当存在虚函数就会出现虚指针vptr指向虚函数所在位置vtbl 将vptr实现vtbl内容翻译为C: (*p->vptr)n; (* p->vptr[n])(p); 动态绑定: 虚机制 1.指针 2.向上转型保证安全 3.调用的是虚函数 2.this指针 [Template Method] This->Serialize()实现: (*(this->vptr)[n])(this) -动态绑定 3.动态绑定 向上转型 : 指针实现 如 B继承A B b; A a

C++面向对象高级编程(上) 第一周笔记 GeekBand

1.防卫式声明: 例: #ifndef ___COMPLEX___ #define ___COMPLEX___ ... #endif 2.内联函数:inline 函数是否真正为内联式函数,最终取决于编译器编译方式. 3.构造函数: 例: class complex{ public: complex(double r=0,double i=0):re(r),im(i){} ... } 对象初始化尽量采用初始化列表的方式. 4.构造函数重载: 5.单例模式        构造函数被放在private

C++面向对象高级编程(下) 第一周笔记 GeekBand

1.Conversion Function 转换函数 class Fraction{ public: operator double() const { //转换不可能改变类里的成员,通常加上const return (double)(m_numerator / m_denominator); }//把Fraction对象转换成double类型,double()不可有参数,返回类型不用写 private: int m_numerator; int m_denominator; }; Fracti

C++面向对象高级编程(上) 第三周笔记 GeekBand

复合:has a 构造由内而外: Container的构造函数首先调用component的default(默认)构造函数,然后再执行自己的构造函数: Container::container(...):component(){...}: 析构由外而内: Container的析构函数首先析构自己,然后再析构component: Container::~container() {... ~component()}: Delegation:has a (composition by reference

Boolan C++面向对象高级编程学习第五周

本周C++面向对象高级编程编程主要是讲三个方面 1.虚表和虚指针 虚指针:如果类(包括父类)中有虚函数,就一定会有虚指针,虚指针是指向虚函数的虚表. 虚表:虚指针指向的一种类的表,表上存有类里面虚函数的实现的指针 这里虚函数和虚表一般是和类的多太性结合在一起来使用的,子类调用虚函数是通过调用虚指针来调用虚函数表里面的指针再来实现函数特性 这种调用的方式叫做动态绑定,是一种通过指针类型自动来判断调用的对象,在实现中可以不用区分哪个对象从而调用对应的函数 我们普通的调用类里面的函数叫做静态绑定 2.

C++面向对象高级编程(三)

版权声明:本文为博主原创文章,未经博主允许不得转载. 接下来的几篇文章,我将回忆一下C++的基础. C++的由两部分组成 1.C++语言 2.C++标准库 本篇文章主要分享我学习C++语言的笔记. 本节主要介绍 Big Three 即析构函数,拷贝构造函数,赋值拷贝函数,前面主要围绕不带指针的class complex本节中主要围绕带指针的String类 前面我说过如果你创建的类不带有指针,那么多半你可以不用写析构函数,但是如果你创建了一个带指针的类,那么你必须重写Big Three 创建一个类

C++面向对象高级编程(二)

版权声明:本文为博主原创文章,未经博主允许不得转载. 接下来的几篇文章,我将回忆一下C++的基础. C++的由两部分组成 1.C++语言 2.C++标准库 本篇文章主要分享我学习C++语言的笔记. 这次主要回忆一下操作符重载. 先看一段代码,后续我会介绍这么做的原由 #include <iostream> class complex { public: complex(double r = 0, double i = 0) : re(r) ,im(i) {} complex& oper

Python3 面向对象 高级编程

正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.  class Student(object): pass 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 还可以尝试给实例绑定一个方法: >>> def set_age(self, age): # 定义一个函数作为实例方法 ...

C++面向对象高级编程(六)转换函数与non-explicit one argument ctor

技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.conversion function 转换函数 //1.转换函数 //conversion function //只要你认为合理 你可以任意写转换函数 class Fraction { public: Fraction(int num, int den = 1):m_numerator(num),m_denominator(den){} operator double() const //注意看 没有返回类型,这个编译器会帮做,且防止