哪里有网站培训的,中国建筑网校,给家乡做网站,岳阳seo外包6. 相关技术知识补充
6.1 不定参函数
在初学C语⾔的时候#xff0c;我们都⽤过printf函数进⾏打印。其中printf函数就是⼀个不定参函数#xff0c;在函数内部可以根据格式化字符串中格式化字符分别获取不同的参数进⾏数据的格式化。
⽽这种不定参函数在实际的使⽤中也⾮常…6. 相关技术知识补充
6.1 不定参函数
在初学C语⾔的时候我们都⽤过printf函数进⾏打印。其中printf函数就是⼀个不定参函数在函数内部可以根据格式化字符串中格式化字符分别获取不同的参数进⾏数据的格式化。
⽽这种不定参函数在实际的使⽤中也⾮常多⻅在这⾥简单做⼀介绍 不定参宏函数
#include iostream
#include cstdarg
#define LOG(fmt, ...) printf([%s:%d] fmt \n, __FILE__, __LINE__,
##__VA_ARGS__)
int main()
{LOG(%s-%s, hello, world);return 0;}C⻛格不定参函数
#include iostream
#include cstdarg
void printNum(int n, ...) {va_list al;va_start(al, n);//让al指向n参数之后的第⼀个可变参数for (int i 0; i n; i) {int num va_arg(al, int);//从可变参数中取出⼀个整形参数std::cout num std::endl;}va_end(al);//清空可变参数列表--其实是将al置空
}
int main()
{printNum(3, 11,22,33);printNum(5, 44,55,66,77,88);return 0;
}#include iostream
#include cstdarg
void myprintf(const char *fmt, ...) {//int vasprintf(char **strp, const char *fmt, va_list ap);char *res;va_list al;va_start(al, fmt);int len vasprintf(res, fmt, al);va_end(al);std::cout res std::endl;free(res);
}
int main()
{myprintf(%s-%d, 你好, 世界);return 0;
}C⻛格不定参函数 #include iostream
#include cstdarg
#include memory
#include functional
void xprintf()//参数包为空的特化
{std::cout std::endl;
}
templatetypename T, typename ...Args//C11可变参数包
void xprintf(const T value, Args ...args) {std::cout value ;if ((sizeof ...(args)) 0) {xprintf(std::forwardArgs(args)...);}else {xprintf();}
}
int main()
{xprintf(你好);xprintf(你好, 19);xprintf(你好, 我的心上人, 19);return 0;
}6.2 设计模式
设计模式是前辈们对代码开发经验的总结是解决特定问题的⼀系列套路。它不是语法规定而是⼀套⽤来提高代码可复⽤性、可维护性、可读性、稳健性以及安全性的解决方案。 六大原则 • 单一职责原则Single Responsibility Principle 1.类的职责应该单⼀⼀个方法只做⼀件事。职责划分清晰了每次改动到最⼩单位的⽅法或类。 2.使⽤建议两个完全不⼀样的功能不应该放⼀个类中⼀个类中应该是⼀组相关性很⾼的函数、数据的封装 3.⽤例⽹络聊天⽹络通信 聊天应该分割成为⽹络通信类 聊天类 • 开闭原则Open Closed Principle 对扩展开放对修改封闭 2.使⽤建议对软件实体的改动最好⽤扩展⽽⾮修改的⽅式。 3.⽤例超时卖货商品价格—不是修改商品的原来价格⽽是新增促销价格。 • 里氏替换原则Liskov Substitution Principle 通俗点讲就是只要父类能出现的地⽅子类就可以出现⽽且替换为子类也不会产⽣任何错误或异常。 1.在继承类时务必重写父类中所有的⽅法尤其需要注意父类的protected方法子类尽量不要暴露自己的public⽅法供外界调⽤。 2.使⽤建议子类必须完全实现父类的⽅法孩子类可以有⾃⼰的个性。覆盖或实现⽗类的⽅法时输⼊参数可以被放大输出可以缩小 3.⽤例跑步运动员类-会跑步⼦类⻓跑运动员-会跑步且擅⻓⻓跑 ⼦类短跑运动员-会跑步且擅⻓短跑 • 依赖倒置原则Dependence Inversion Principle 1.高层模块不应该依赖低层模块两者都应该依赖其抽象. 不可分割的原子逻辑就是低层模式原子逻辑组装成的就是高层模块。 2.模块间依赖通过抽象接口发生具体类之间不直接依赖 3.使⽤建议每个类都尽量有抽象类任何类都不应该从具体类派⽣。尽量不要重写基类的方法。结合里氏替换原则使⽤。 4.⽤例奔驰车司机类–只能开奔驰 司机类 – 给什么⻋就开什么⻋ 开车的⼈司机–依赖于抽象 • 迪米特法则Law of Demeter又叫“最少知道法则” 1.尽量减少对象之间的交互从而减⼩类之间的耦合。⼀个对象应该对其他对象有最少的了解。 2.对类的低耦合提出了明确的要求 只和直接的朋友交流 朋友之间也是有距离的。⾃⼰的就是⾃⼰的如果⼀个⽅法放在本类中既不增加类间关系也对本类不产⽣负⾯影响那就放置在本类中。 3.用例⽼师让班⻓点名–⽼师给班⻓⼀个名单班⻓完成点名勾选返回结果⽽不是班⻓点名⽼师勾选 • 接口隔离原则Interface Segregation Principle 1.客户端不应该依赖它不需要的接⼝类间的依赖关系应该建立在最小的接⼝上 2.使用建议接⼝设计尽量精简单⼀但是不要对外暴露没有实际意义的接口。 3.⽤例修改密码不应该提供修改⽤户信息接⼝⽽就是单⼀的最⼩修改密码接口更不要暴露数据库操作 从整体上来理解六⼤设计原则可以简要的概括为⼀句话⽤抽象构建框架⽤实现扩展细节具体到每⼀条设计原则则对应⼀条注意事项 • 单⼀职责原则告诉我们实现类要职责单⼀ • ⾥⽒替换原则告诉我们不要破坏继承体系 • 依赖倒置原则告诉我们要⾯向接⼝编程 • 接口隔离原则告诉我们在设计接⼝的时候要精简单⼀ • 迪米特法则告诉我们要降低耦合 • 开闭原则是总纲告诉我们要对扩展开放对修改关闭。