当前位置: 首页 > news >正文

c++some

1.理解PImpl 

在头文件定义类

头文件使用

class Son:public Fater
{
private:
    class SonImpl; 
    SonImpl* pImpl;  // 指向实际实现的指针
public:
    Son();
    ~Son();
    void show(int x);
    void prit();
};

然后cpp文件

// 实际的实现类
class Son::SonImpl {
public:
	void fun1();
	void fun2();
	void fun3();
    void show(int x) {
		switch (x)
		{
		case 1:
			fun1();
			break;
		case 2:
			fun2();
			break;
		case 3:
			fun3();
			break;
		default:
			break;
		}
    }
};

void Son::SonImpl::fun1()
{
	cout << "11111" << endl;
}

void Son::SonImpl::fun2()
{
	cout << "22222" << endl;
}

void Son::SonImpl::fun3()
{
	cout << "33333" << endl;
}

// Son 类的方法实现
Son::Son() : pImpl(new SonImpl()) {} //这里用智能指针更好
Son::~Son() { delete pImpl; }
void Son::show(int x) { pImpl->show(x); }
void Son::prit() { pImpl->show(1); }

好处1.可以减少头文件改动 

2.封装性更好 只要传入参数就可以调用不同的函数 

有个问题是为什么这里要用指针  若是直接用对象的话 SonImpl这个类没有定义只有声明会报错

2.不管什么继承都不能访问父类的私有成员

3.报错 LNK2019 自己的代码做了修改   返回值是vector类型

LNK2019: 无法解析的外部符号 "public: void __cdecl CSpPublicInterfaces::AddActMenuItem(class std::basic_string<char,struct

这里显示返回值是void类型  是有可能编译器仍然使用旧的编译缓存,没有检测更改。即使修改了函数的返回类型,编译器可能没有重新编译相关的 .cpp 文件  重新生成项目

相关文章:

  • 如何为你的github开源项目选择合适的开源协议?
  • Go 1.24 新特性解析:泛型类型别名、弱指针与终结器改进
  • HTTP抓包Websocket抓包(Fiddler)
  • tar包部署rabbitMQ
  • 进阶版孟德尔随机化方法!遗传变异聚类+异质性检验,避免水平多效性带来的假阳性结果(PCMR)
  • C++ 命名空间
  • 【neo4j数据导出并在其他电脑导入】
  • SQL问题分析与诊断(8)——前提
  • 动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析
  • 登山第二十一梯:点云补全——零样本、跨激光分布的“泥瓦匠”
  • 计算机二级(C语言)考试高频考点总汇(一)—— C语言通识、数据类型和运算符、位运算、进制转换、进制转换方法
  • LabVIEW柔性机械臂减振控制系统
  • LeetCode算法题(Go语言实现)_12
  • 今日行情明日机会——20250326
  • 微信小程序pdf预览
  • 基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
  • 华为OD机试A卷 - 快递业务站 计算快递主站点(C++ Java JavaScript Python )
  • 【图片识别Excel表格】批量将图片上的区域文字识别后保存为表格,基于WPF和阿里云的项目实战总结
  • Echarts使用
  • Chaos Mesh 混沌工程平台介绍、安装及使用指南
  • 一周文化讲座|“我的生命不过是温柔的疯狂”
  • 俄谈判代表团已抵达土耳其,谈判预计在莫斯科时间10时左右开始
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 经常口干口渴的人,要当心这些病
  • 占地57亩的“潮汕豪宅”面临强制拆除:曾被实施没收,8年间举行5次听证会
  • 首次采用“顶置主星+侧挂从星”布局,长二丁“1箭12星”发射成功