c++some

1.理解PImpl

在头文件定义类

头文件使用

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

然后cpp文件

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 文件 重新生成项目

相关推荐
TiAmo zhang12 分钟前
现代C++的AI革命:C++20/C++23核心特性解析与实战应用
c++·人工智能·c++20
Dxxyyyy12 分钟前
零基础学JAVA--Day26(枚举类)
java·开发语言
好望角雾眠18 分钟前
第四阶段C#通讯开发-6:Socket之UDP
开发语言·笔记·学习·udp·c#
黑屋里的马23 分钟前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
z1874610300326 分钟前
list(带头双向循环链表)
数据结构·c++·链表
升鲜宝供应链及收银系统源代码服务26 分钟前
升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现
java·开发语言·数据库·redis·缓存·开源·供应链系统
大佬,救命!!!28 分钟前
python实现象棋
开发语言·python·学习笔记·pygame·少儿编程·记录成长
棉猴29 分钟前
《pygame中Sprite类实现多帧动画》注-通过多张序列帧显示动画2-2
开发语言·python·游戏·游戏程序·pygame
练习时长一年37 分钟前
Spring AoP的切点匹配
java·开发语言
276695829244 分钟前
朴朴超市小程序分析
java·python·小程序·node·sign·朴朴超市·sign-v2