Day 67 组合,标识符作用域与可见性, 单例模式中的,懒汉,饿汉模式

本文探讨了C++中的类组合概念,解释了如何通过组合实现复杂对象的构建,并深入讨论了单例模式的不同实现方式,包括懒汉模式和饿汉模式。此外,文章还涉及了函数重载、命名空间作用域、数据共享与保护等关键主题。

1.组合,在c++中一切皆对象,而每个class不可能就一下包含了对象的所有属性和行为,这就出现了类的组合。
比如要描述计算机,计算机类有不可缺少的两个属性,一个是硬件一个是软件。而硬件又可以是一个类,包括cpu和内存
;软件也可以是一个类包括操作系统和各种应用;然而cpu,内存可以是一个类,操作系统应用又可以是一个类,,,,依次类推,,所以就有了类的组合问题

2.函数的重载要在同一作用域下

3.外层标识符在内层不可见。

4.所有静态生存期的,在main函数之前系统会初始化。

5.匿名对象,生存期完后会立即释放,生存期一般就是本函数,。因为它没有名字,所以自己执行完后别人也无法使用它,所以系统立即回收它。

  1. &&n右值引用,所有匿名对象都是右值,f(10) ,匿名对象被引用后就变为左值,生存周期变长。

7.类里面的静态成员函数可以 类名::函数名 这种形式访问。

8.静态成员函数不存在this指针。

9.单例模式, cout是一个典型的单例模式,因为输出只要一个。

10.单例中的懒汉模式,与饿汉模式。
懒汉模式是调用静态函数创造时才会去堆上申请空间,当并发模式时就可能出错,应为判断条件可能还是空指针, 饿汉模式是在一开始就把堆申请好。

#include

using namespace std;

class SingelTon
{
public:
//懒汉模式
static SingelTon *create()
{
//共用一个m_p当并发时可能会申请两个空间。
if(m_p == NULL)
{ //通过判断是否为空来决定要不要在堆上,new 一个类出来
m_p = new SingelTon;
}

    return m_p;
}
static void destroy()
{
//调用delete 可以直接释放堆上的空间。
    delete m_p;
    m_p = NULL;
}
static unsigned int getCounter()
{
    return counter;
}

private:

SingelTon(){++counter;}    
SingelTon(const SingelTon &){++counter;}
~SingelTon(){--counter;}
static SingelTon *m_p;
static unsigned int counter;

};
//静态成员的定义, 成员类型,类名,:: 成员名。
SingelTon *SingelTon::m_p;
unsigned int SingelTon::counter;

int main()
{

cout << SingelTon::getCounter() << endl;
SingelTon *p = SingelTon::create();
SingelTon *q = SingelTon::create();
cout << SingelTon::getCounter() << endl;

// SingelTon s(*p);
cout << p << endl;
cout << q << endl;

return 0;

}

//饿汉模式
class SingelTon
{
public:

static SingelTon *create()
{
    return m_p;
}

private
?/构造
SingelTon( ) {}
//复制构造
SingelTon(const SingelTon &){ }
~SingelTon(){}
//这里只是声明
static SingelTon *m_p;
};

//一开始就在堆上申请一个对象
SingelTon *SingelTon::m_p = new SingelTon;

int main()
{
return 0;
}


#include
//命名空间
using namespace std;

class CPU
{
public:
CPU(int n) : Fre(n){cout << “CPU()” << endl;}
~CPU(){cout << “~CPU()” << endl;}
void showFre()
{
cout << Fre << endl;
}

int Fre;

};

class MEM
{
public:
MEM(){cout << “MEM()” << endl;}
~MEM(){cout << “~MEM()” << endl;}
};

class HW
{
public:
HW(int fre) : cpu(fre){cout << “HW()” << endl;}
~HW(){cout << “~HW()” << endl;}
CPU cpu;
MEM mem;
};

class APP
{
public:
APP(){cout << “APP()” << endl;}
~APP(){cout << “~APP()” << endl;}
};

class OS
{
public:
OS(){cout << “OS()” << endl;}
~OS(){cout << “~OS()” << endl;}
};

class SW
{
public:
SW(){cout << “SW()” << endl;}
~SW(){cout << “~SW()” << endl;}
APP app;
OS os;
};

class Computer
{
public:
//构造
Computer(int n) : hw(n){cout << “Computer()” << endl;}
//析构
~Computer(){cout << “~Computer()” << endl;}
//是个类类型
HW hw;
SW sw;
};

int main()
{

 Computer c(1000);
 //可以访问到最后的showFre函数
 c.hw.cpu.showFre();

}


2.数据的共享与保护
例如函数名,变量名都是标识符。
命名空间作用域 -》类作用域 -》局部作用域

#include

using namespace std;

//函数原型作用域,作用域只在函数里面
void add(int a, int b);

//局部作用域
void fn(int i)
{
int a;
{ //b作用域出了括号之后就结束了
int b;
}
}

//类作用域
class Demo
{
public:
void fn()
{
m_i = 100;
}
void fm(int &m_i)
{
this->m_i = 100;
// ::read();
}

void read()
{

}

//此作用域在类结束之后就结束了
int m_i;

enum WEEK {Mon, Fri};
class BBB
{

};

};

//命名空间作用域,比如有一个类名,要使用两次,但程序中类名是不能重复的,因此可以使用namespace来区分,比如一个是XA AAA, 另外一个是BJ AAA;

namespace XA
{
class AAA
{
public:
AAA()
{
std::cout << “XA::AAA()” << std::endl;
}

};
int g_i;
namespace BLQ
{
    class BBB
    {

    };
}
void fn(){}

}

//命名空间作用域
namespace BJ
{
void fn(int ){}
class AAA
{
public:
AAA()
{
std::cout << “BJ::AAA()” << std::endl;
}
};
}

//匿名命名空间,没有类名
//namespace
//{
// class Demo
// {

// };
//}

//全局命名空间作用域
void foo()
{

}

#include
#include
#include
using namespace XA;

void fn()
{
int d;
}

int i = 1;

int main()
{
int i = 10;

{
    int i = 100;
    cout << i << endl;
}

// double d;
// std::string s;
// Demo d;
//全局命名空间作用域
// ::foo(); // 表明为全局的
// AAA a;
// BLQ::BBB b;
// fn();
// g_i = 100;

// ::是作用域分辨符
// Demo::BBB b;
// Demo d;
// d.m_i = 10;
// d.fm();
return 0;
}

【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念分析方法;②掌握利用Simulink进行电力系统建模仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值