C/C++提高篇
文章平均质量分 57
C/C++基础知识的探究与延伸,提高C/C++基础能力
呆萌宝儿姐
CSDN专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
展开
-
C++ 值传递和引用传递实战探究
最近整理博文,发现草稿箱里堆积了200+,这两天重新理清了很多发了出去,近两年一直在学前端和Java,看到这篇C++也挺感慨的,想起当年攻克C++,就仿佛昨天在刷题一样。无论学什么,都要坚强要加油一开始也忘了这篇主题讲的啥了,我就边整理边大家要是觉得有用就评论下我再详细整理,要是没用我就删了。......原创 2022-07-22 10:51:55 · 1418 阅读 · 2 评论 -
c++11标准 类默认函数的控制:“=default“ 和 “=delete“函数
C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。C++11 标准引入了一个新特性:"=default"函数。程序员只需在函数声明后加上“=defau...原创 2020-05-08 15:21:55 · 4119 阅读 · 1 评论 -
C++并发编程——你好,并发世界
一个简单的线程程序#include <iostream>#include <thread>using namespace std;void hello(){ std::cout << "Hello Concurrent World\n";}int main(){ thread t(hello); t.join();}...原创 2020-05-05 16:10:08 · 3815 阅读 · 0 评论 -
C++中的explicit详解
C++ explicit关键字详解首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用...原创 2020-05-08 14:43:16 · 31822 阅读 · 9 评论 -
Linux提高:信号小案例
文章目录题目代码知识回顾守护进程守护进程概念创建守护进程模型信号信号机制题目创建一个守护进程 ,使用 Linux 信号机制,让守护进程退出。代码/************************************************************************* > File Name: main.c > Author: 杨永利 > Mail: [email protected] > Created Time:原创 2021-07-16 19:43:59 · 2793 阅读 · 4 评论 -
Linux提高:孤儿进程
文章目录题目知识回顾孤儿进程概念代码题目编程实现孤儿进程知识回顾孤儿进程概念孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。代码实现孤儿进程,需要父进程先于子进程结束,故只需要在子进程中只需要 sleep(5)即可,同时为了观察现象,可以让 sleep 时间长一点异步操作运行结果如下图:/*************************************原创 2021-07-16 18:13:43 · 2774 阅读 · 0 评论 -
Linux僵尸进程详解
文章目录僵尸进程概念僵尸进程问题及危害实现一个僵尸进程僵尸进程处理僵尸进程的预防(1)通过信号机制(2)Fork 两次僵尸进程概念在 unix/linux 中,正常情况下,子进程是通过父进程创建的。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用 wait()或者 waitpid()系统调用取得子进程的终止状态。僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 wai原创 2021-07-15 08:48:21 · 5244 阅读 · 1 评论 -
Linux提高:僵尸进程
文章目录题目代码知识回顾僵尸进程概念僵尸进程问题及危害题目代码实现一个僵尸进程代码实现僵尸进程,只需让子进程先于父进程结束,并且父进程不调用 wait/ waitpid 函数回收子进程的退出状态。在父进程没有退出的转态下使用 ps 命令即可查看存在的僵尸进程信息。下图运行结果,红框里为僵尸子进程/************************************************************************* > File Name: main.c原创 2021-07-14 21:49:09 · 2978 阅读 · 0 评论 -
Linux提高:多线程压力测试
文章目录题目代码知识回顾线程线程特点题目创建一个多进程的程序,由用户输入进程个数和每个进程的运行圈数代码/************************************************************************* > File Name: main.c > Author: 杨永利 > Mail: [email protected] > Created Time: 2021年07月14日 星期三 21时原创 2021-07-14 21:40:45 · 3190 阅读 · 1 评论 -
Linux提高:多进程压力测试
文章目录题目代码知识回顾进程ForkFork 返回值:Fork 所做工作:进程状态切换题目创建一个多进程的程序,由用户输入进程个数和每个进程的运行圈数。代码#include <unistd.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char const *argv[]){ int iProcessNum = 0; int原创 2021-07-14 21:20:39 · 3041 阅读 · 1 评论 -
C++提高:String 类实现
题目设计并实现一个 string 类,并重载<<、>>、[]、==、+、=等运算符代码#include<iostream>#include<iomanip>using namespace std;class String{ friend ostream& operator<< (ostream&,String&);//重载<<运算符 friend istream& operato原创 2021-07-14 20:31:37 · 2818 阅读 · 0 评论 -
C++提高:运算符重载
文章目录题目代码知识回顾重载重载运算符特点运算符重载的注意事项可重载的运算符运算符重载后,优先级和结合性重载运算符有哪些限制运算符重载时必须遵循哪些原则题目代码实现+、=、==、[]、!=、++、–等运算符重载代码#include <iostream> using namespace std;class A {public: A(int x, int y) { m_iX = x; m_iY = y; } // 前置--运算符重载 A &operator原创 2021-07-14 18:28:45 · 2792 阅读 · 7 评论 -
C++提高:多态
文章目录题目代码知识回顾多态多态的特点题目定义一个父类 A,定义一个子类 B,B 中重载 A 中的函数方法,实现多态代码#include <iostream>#include <string>using namespace std;//定义一个 A 类class A {public: virtual void func() { cout << "call father func" << endl; } virtual ~A()原创 2021-07-14 17:10:28 · 2806 阅读 · 0 评论 -
C++提高:拷贝构造函数
文章目录拷贝构造函数里能调用 private 成员变量吗?一个类中可以存在多于一个的拷贝构造函数吗?调用拷贝构造函数的情形1. 一个对象作为函数参数,以值传递的方式传入函数体2. 一个对象作为函数返回值,以值传递的方式从函数返回3. 一个对象用于给另外一个对象进行初始化(常称为赋值初始化)拷贝构造函数里能调用 private 成员变量吗?解答:拷贝构造函数其时就是一个特殊的构造函数,操作的还是自己类的成员变量,所以不受 private 的限制。一个类中可以存在多于一个的拷贝构造函数吗?解答:类中可以原创 2021-07-14 16:46:41 · 2845 阅读 · 1 评论 -
C++提高:继承
文章目录题目代码知识回顾构造函数构造函数的格式构造函数特点调用默认构造函数的三种情况拷贝构造函数拷贝构造函数的格式调用拷贝构造函数的情形析构函数析构函数的格式题目定义 A、B、C、D 四个类,D 继承 C、C 继承 B、B 继承 A,查看 A、B、 C、D 类中构造函数、析构函数、拷贝构造函数调用顺序代码#include <iostream>using namespace std;class A {public: void Draw() { cout << "A:原创 2021-07-14 16:35:24 · 2760 阅读 · 0 评论 -
数据结构提高:链表
文章目录题目代码创建链表遍历链表插入节点删除节点销毁链表题目请用 c 语言自己实现单项链表的增删改查功能代码创建链表使用结构体定义节点类型:typedef struct _LINKNODE{ int id; //数据域 struct _LINKNODE* next; //指针域}link_node;编写函数:link_node* init_linklist()建立带有头结点的单向链表,循环创建结点,结点数据域中的数值从键盘输入,以 -1 作为输入结束标志,链表的头结点地址由函数值返原创 2021-07-14 09:49:17 · 2817 阅读 · 0 评论 -
C语言提高:接口的封装与设计
题目现有 5 个数,10,50,20,90,30,请设计两个接口分别实现打印功能和排序功能。代码#include "stdio.h"#include "string.h"#include "stdlib.h"//打印函数void PrintArray(int arr[], int len){ //打印 for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n");}//排序函数vo原创 2021-07-13 21:52:00 · 2959 阅读 · 0 评论 -
C语言提高:函数指针做函数参数
文章目录题目知识回顾代码题目请构造一个接口函数,实现对两个整数执行某种操作,该操作由调用者实现。要求:测试案例对两个整数进行加减运算知识回顾函数指针的三种定义与使用方式:https://yangyongli.blog.csdn.net/article/details/118711459代码#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdli原创 2021-07-13 21:30:52 · 2955 阅读 · 0 评论 -
函数指针三种定义与使用方式
文章目录函数类型通过什么来区分两个不同的函数?函数指针(指向函数的指针)函数指针的定义与调用案例函数类型通过什么来区分两个不同的函数?一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。函数三要素: 名称、参数、返回值。(C 语言中的函数有自己特定的类型)c 语言中通过 typedef 为函数类型重命名:// f 为函数类型typedef int f(int, int); // p 为函数类型typedef void p(int); 这一点和数组一原创 2021-07-13 21:30:16 · 4881 阅读 · 0 评论 -
解决vs2017中的_CRT_SECURE_NO_WARNINGS警告
警告原因在VS中调用 scanf、sprintf、strcpy、strcat 等函数时常常会提示 _CRT_SECURE_NO_WARNINGS 警告,原因是Visual studio C++不是真正的C++,而是经过Microsoft公司优化的。也许是微软公司的那些开发工程师们认为这些C函数功能内部没有对内存做边界检查,极有可能造成内存越界等问题,所以设置了不安全警告。解决方案一:加宏代码中最上面添加以下代码#define _CRT_SECURE_NO_WARNINGS像这方案二:原创 2021-07-13 21:21:56 · 3895 阅读 · 0 评论 -
C语言提高:结构体嵌套一级指针
文章目录题目代码struct 知识回顾结构体变量的定义和初始化结构体初始化代码示例结构体类型和结构体变量关系:题目现有一个学生的信息(姓名,年龄),请用结构体封装这些数据,并用测试案例输出。代码#include<stdio.h>#include <string.h>#include <stdlib.h>// 定义结构体类型 存放姓名与年龄struct stu{ char *name; // 一级指针 int age;};int main()原创 2021-07-13 21:05:00 · 2969 阅读 · 1 评论 -
C语言提高:三级指针的输出
文章目录题目代码解析题目现有三个字符串“lalalalala”,“yang”,“helloworld”,要求实现一个函数(接口)把这三个字符串存放到堆区。要求:使用三级指针作为指针输出这个堆空间的地址。代码#include "stdio.h"#include "string.h"#include "stdlib.h"#include<string.h>int getArray(char ** myarray1, char ***newp, int num){ int i原创 2021-07-13 20:53:12 · 2735 阅读 · 3 评论 -
vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决
错误原因新标准中,不能把指针指向一串常量解决方案一:引入[]char*str = “hello world”;改成:char str_tmp[] = “hello world”;char *str = str_tmp;方案二:加constchar*str = “hello world”;改成:const char*str = “hello world”;方案三:右键打开项目属性找到语言的符合模式改为否就可以了。...原创 2021-07-13 15:24:40 · 12668 阅读 · 8 评论 -
C语言提高: 二级指针的输入输出
文章目录题目代码解析1. 二级指针的输入输出2. 内存模型图题目现有三个字符串“aaaaa”,“bbbbb”,“ccccc”,要求实现一个函数(接口)把这三个字符串拼接成一个字符串。代码#include "stdio.h"#include "string.h"#include "stdlib.h"void SortArray(const char ** const myArray1, char ** myarray2){ if (myArray1 == NULL) { printf原创 2021-07-13 14:37:31 · 3223 阅读 · 4 评论 -
C语言提高:一级指针的输入输出
【题目】现有一个字符串"eeddccbbaa",要求写一个函数(接口),实现字符串的反转。知识扩展调用者与被调用者在参考代码中我们可以看到 rev_str 函数和 main 函数,在 main 函数中调用了 rev_str 函数,那么我们就说 main 函数是调用者,rev_str 函数是被调用者。指针的输入输出指针的输入输出是站在被调用者的角度上的,也就是站在此题答案中rev_str 函数的角度上。rev_str 函数有两个参数 from,len,调用者 main函数在栈区给字符串“ee原创 2021-07-13 12:29:52 · 2781 阅读 · 0 评论