PoEduo - C++阶段班【Po学校】-07static与const与类的化学变化- 课堂笔记

1-->static与类  

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

class AA
{
public:
    AA(int a, int b)
    {
        m_a = a;
        m_b = b;
    }

    int getC()
    {
        m_c++;
        return m_c;
    }

    //静态的成员方法
    static int& getCC()
    {
        return m_c;
    }

private:
    //static修饰的静态成员变量
    static int m_c;
    int m_a;
    int m_b;
};

//静态成员变量的初始化,一定类的外边。
int AA::m_c = 100;

int main(void)
{
    AA a1(10, 20);
    AA a2(100, 200);

    cout << a1.getC() << endl;//101
    cout << a2.getC() << endl;//102

    //a1.getCC() = 200;
    AA::getCC() = 200;

    cout << a1.getC() << endl;//201
    cout << a2.getC() << endl;//202

    return 0;
}

示例2

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

class Box
{
public:
    Box(int l, int w)
    {
        len = l;
        width = w;
    }

    int volume()
    {
        int v = len *width*hight;

        cout << "高度是" << hight << endl;
        cout << "体积是" <<  v << endl;

        return v;
    }

    static void changeHight(int h)
    {
        hight = h;
    }
private:
    int len;
    int width;
    static int hight;

};

int Box::hight = 100;

int main(void)
{
    Box b1(10, 20);
    Box b2(100, 200);

    b1.volume();
    b2.volume();

    Box::changeHight(300);

    b1.volume();
    b2.volume();

    return 0;
}

示例  学生求平均分数

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>

using namespace std;

class Student
{
public:
    Student(int id, double score)
    {
        //创建一个学生
        m_id = id;
        m_score = score;

        m_count++;//累加一个个数
        sum_score += score;
    }

    static int getCount()
    {
        return m_count;
    }

    static double getAvg()
    {
        return sum_score / m_count;
    }

    ~Student() {
        m_count--;
        sum_score -= m_score;
    }

private:
    int m_id;
    double m_score;//得分

    //统计学生个数的静态成员变量
    static int m_count;

    //统计学生总分数的静态成员变量
    static double sum_score;
};

int Student::m_count = 0;

double Student::sum_score = 0.0;

int main(void)
{
    Student s1(1, 80);
    Student s2(2, 90);
    Student s3(3, 100);

    cout << "学生总人数: " << Student::getCount() << endl;
    cout << "学生的平均分: " << Student::getAvg() << endl;

    return 0;
}

static不占用内存空间

#include    <iostream>
using namespace    std;

class    C1
{
public:
    int    i;        //4
    int    j;        //4
    int    k;        //4
};    //12

class    C2
{
public:
    int    i;
    int    j;
    int    k;
    static int    m;                                                                            //4
public:
    int    getK()    const    { return    k; }        //4
    void    setK(int    val)    { k = val; }    //4
};

struct    S1
{
    int    i;
    int    j;
    int    k;
};    //12

struct    S2
{
    int    i;
    int    j;
    int    k;
    static int    m;
};    //12?

int    main()
{
    cout << "c1    :    " << sizeof(C1) << endl;
    cout << "c1    :    " << sizeof(C2) << endl;

    C2 c1, c2;

    //c1.getK();  //为什么会return c1.k
    //c2.getK(); // 为什么会return c2.k

    cout << " ----- " << endl;

    cout << "c1    :    " << sizeof(S1) << endl;
    cout << "c1    :    " << sizeof(S2) << endl;

    return 0;
}
#include <stdio.h>

class Test
{
private:
    int mCount;
public:
    Test() : mCount(0)
    {
        mCount++;
    }
    ~Test()
    {
        --mCount;
    }
    int getCount()
    {
        return mCount;
    }
};

Test gTest;

int main()
{
    Test t1;
    Test t2;

    printf("count = %d\n", gTest.getCount());
    printf("count = %d\n", t1.getCount());
    printf("count = %d\n", t2.getCount());

    return 0;
}

再看示例:

#include <stdio.h>

class Test
{
private:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    int getCount()
    {
        return cCount;
    }
};

int Test::cCount = 0;

Test gTest;

int main()
{
    Test t1;
    Test t2;

    printf("count = %d\n", gTest.getCount());
    printf("count = %d\n", t1.getCount());
    printf("count = %d\n", t2.getCount());

    Test* pt = new Test();

    printf("count = %d\n", pt->getCount());

    delete pt;

    printf("count = %d\n", gTest.getCount());

    return 0;
}

示例

#include <stdio.h>

class Test
{
public:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    int getCount()
    {
        return cCount;
    }
};

int Test::cCount = 0;

int main()
{
    printf("count = %d\n", Test::cCount);

    Test::cCount = 1000;

    printf("count = %d\n", Test::cCount);

    return 0;
}

再看  示例:

#include <stdio.h>

class Demo
{
private:
    int i;
public:
    int getI();
    static void StaticFunc(const char* s);
    static void StaticSetI(Demo& d, int v);
};

int Demo::getI()
{
    return i;
}

void Demo::StaticFunc(const char* s)
{
    printf("StaticFunc: %s\n", s);
}

void Demo::StaticSetI(Demo& d, int v)
{
    d.i = v;
}

int main()
{
    Demo::StaticFunc("main Begin...");

    Demo d;

    Demo::StaticSetI(d, 10);

    printf("d.i = %d\n", d.getI());

    Demo::StaticFunc("main End...");

    return 0;
}

示例3

#include <stdio.h>

class Test
{
private:
    static int cCount;
public:
    Test()
    {
        cCount++;
    }
    ~Test()
    {
        --cCount;
    }
    static int GetCount()
    {
        return cCount;
    }
};

int Test::cCount = 0;

int main()
{
    printf("count = %d\n", Test::GetCount());

    Test t1;
    Test t2;

    printf("count = %d\n", t1.GetCount());
    printf("count = %d\n", t2.GetCount());

    Test* pt = new Test();

    printf("count = %d\n", pt->GetCount());

    delete pt;

    printf("count = %d\n", Test::GetCount());

    return 0;
}
时间: 2024-10-14 02:29:58

PoEduo - C++阶段班【Po学校】-07static与const与类的化学变化- 课堂笔记的相关文章

PoEduo - C++阶段班【Po学校】-继承&amp;虚函数&amp;抽象&amp;接口- 课堂笔记

附录(一) 扩展知识:  1--> 面向对象的三个基本特征   1.0 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public) 1.1 继承:广义的继承有三种实现形式:实现继承(指使用基类的属性和方法而无需额外编码的能力).可视继承(子窗体使用父窗体的外观和实现代码).接口继承(仅使用属性和方法,实现滞后到子类实现).前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式. 1.3 多态:是将

PoEdu - C++阶段班【Po学校】- 第3天

引用                           类与对象             - C++阶段班[Po学校]- 第36节 - C++阶段班[Po学校]- 第36节 - C++阶段班[Po学校]- 第36节       - C++阶段班[Po学校]- 第36节

PoEduo - C/C++编程突破世界的枷锁【Po学校】- 第7天

PoEduo - C/C++编程突破世界的枷锁[Po学校]- 第7天 PoEduo - C/C++编程突破世界的枷锁[Po学校]- 第7天 PoEduo - C/C++编程突破世界的枷锁[Po学校]- 第7天 PoEduo - C/C++编程突破世界的枷锁[Po学校]- 第7天 资料查阅:链接地址 作业: 预告,下节学习内容:友元

PoEdu - C++阶段班- Lesson02_C to C++

1  原生bool类型 c++里面的bool类型才是真正原生的true和faul,比如常见的大写的"BOOL",它就不是原生的. 原生的与非原生的bool,它们的区别: 详细说下原生bool与非原生bool之间的差别: _Bool 这个是c98之后加上的bool类型,和我们原生bool等同. C++中,建议一直使用原生bool,它是最安全的类型. 补充一点:宏定义一个int类型的bool,之所以这么做,是因为0是false,1是true,在C++中,这种比对是有风险的,可以说是不正确的

[转]java的(PO,VO,TO,BO,DAO,POJO)类名包名解释

java的(PO,VO,TO,BO,DAO,POJO)类名包名解释 2015-04-28 20:11 by Loull, 18 阅读, 0 评论, 收藏, 编辑 VO:值对象.视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象——同时还有DAO模式 DTO:数据传输对象——同时还有DTO模式 PO:全称是persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:全称是business

PoEdu - Windows阶段班 【Po学校】Lesson006_线程_线程的启动到消亡 &amp;线程状态 &amp; 线程安全 &amp; CONTEXT结构体 &amp; 令牌锁

011_线程启动到死亡的详细讲解 1. 线程内核对象 使用计数 2 ##决定当前线程何时销毁 暂停计数 1 ##UINT类型初始为1,可以暂停多次,如置为0则取消暂停. 退出代码 STILL_ACTIVE Signaled FALSE CONTEXT 为空 2. 栈##在隶属于当前进程的空间中,分配一块"栈"空间,以供线程使用 参数 lpParam 入口地址 lpfnAddr 3. CONTEXT##线程上一次运行时的寄存器 IP(指令寄存器) void RtlUserThreadSt

PoEdu - Windows阶段班 【Po学校】Windows编程 Lesson004_003-2 文件操作

001_函数的不同版本 HANDLE : CreateFile()函数返回一个内核对象的句柄 WINAPI : 一种调用约定,调用方式. _In_ 与 _In_opt_ : 本身没有意义,一个说明宏,来标明这个参数的性质. _In_ 说明此参数是"输入型"参数 _In_Opt_ 说明此参数是"输入指针型"参数 _Out_ 说明此参数是"输出型"参数 输出参数要保障:输出型参数,具有可操作的空间 VS2015中,CreateFile()是一个宏:W

我的Po学校第一天《计算机科学篇》

1    程序与CPU 什么是程序,程序是由什么组成的..... 程序 = 算法+数据 cpu -->寄存器--存储数据.(程序员应该注意和深入理解的) 控制器--控制寄存器中数据的读取. 时钟--cpu进行运算时的工作频率. 运算器--协助控制器达到运算的结果(是协调者). 寄存器: 累加寄存器---计算之后的数据(与运算器通信最快的) 标志寄存器---记录cpu的一些状态(帮助我们进行逻辑判断的) 程序计数寄存器---存储下一条指令在内存中的地址 基址寄存器+变址寄存器---找到程序 通用寄

java的(PO,VO,TO,BO,DAO,POJO)类名包名解释

VO:值对象.视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象--同时还有DAO模式 DTO:数据传输对象--同时还有DTO模式 PO:全称是persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:全称是business object:业务对象主要作用是把业务逻辑封装为一个对象.这个对象可以包括一个或多个其它的对象.比如一个简历,有教育经历.工作经历.社会关系等等.我们可以把教育