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

CPP基础

输出: cout << "你好世界 我是C++" << endl;    其中cout相当于C语言中的printf  << 是指最后所有的输入都放在cout中  endl为换行      cerr << "程序错误退出" << endl;  cerr 同样为输出

输入:cin >> a;    在这里cin和C语言中scanf作用一样  

#include <iostream>using namespace std;int main()
{int a=0;int b=0;cout << "你好世界 我是C++" << endl;cout << "你好世界 我是C++" << "你好,我是补充输出的" << endl;cin >> a;       //在这里cin和C语言中scanf作用一样cin >> b;cout << a << "," << b << endl;cout << a << "+" << b << "="<< a+b << endl;cerr << "程序错误退出" << endl;return 0;
}

创建namespace 

namespace cir {double PI=3.141592653;//获取圆形周长的函数double getlenth0fcircle(double radius){return 2*PI*radius;}//获取圆形面积的函数double getAifCircle(double radius){return PI*radius*radius;}}

在.cpp文件中 首先要引用 #include “cir.h” 然后要加上  using namespace cir  才能够使用

#include <iostream>
#include <stdio.h>
#include "cir.h"using namespace std;
using namespace cir;int main()
{double myRadius =5 ;cout << "Hello World!namespace" << endl;//printf("lenth: %lf ,are:%lf\n", cir::getlenth0fcircle(myRadius),//      cir::getAifCircle(myRadius));printf("lenth: %lf ,are:%lf\n", getlenth0fcircle(myRadius),getAifCircle(myRadius));return 0;
}

Lambda 表达式

Lambda 表达式是C++ 引入的一种匿名函数的方式,它允许你在需要函数的地方内联的定义函数,而无需单独命名函数

int main()
{int x=60;int y=20;auto add=[](int a,int b)->int{return a+b;};int ret =add(x,y);cout << ret;return 0;
}

其中auto为预测  add为命名   【】捕获列表  ()为参数  int 为类型   

int getMax(int a, int b,bool(*p1)(int a,int b))
{if(p1(a,b)){return a;}else{return b;}
}
int main()
{int x=40;int y=20;//bool(*p)(int a,int b)=compare;int max=getMax(x,y,[](int a,int b)->bool {return a>b;});cout << max <<endl;return 0;
}
int max=getMax(x,y,[](int a,int b)->bool {       return a>b;
});   

内联函数和Lambda函数

带有捕获列表的Lambda 函数

方式1

 auto add =[x,y]()->int{//用这种方式捕获,是不能修改变量值的,只能用,可读。return x+y;};int ret =add();cout << ret <<  endl;

方式2

 auto mul =[=]()->int{//用这种方式可以捕获所有的变量,不需要去在列表中写明,是不能修改变量值的,只能用,可读。return x*y;};ret =mul();cout << ret <<  endl;

= 可以捕获所有的变量

方式三

auto modifyAndMul =[&]()->int{//用这种引用的方式来捕获,引用类似指针,进行地址访问。 可修改数值x=15;return x*y*z;};ret =modifyAndMul();cout << ret <<  endl;

& 这种方式可以修改捕获的数值

内联函数

类:

当把在c语言中的结构体搬到c++中 会出现一系列的问题 

以下为c语言的结构体

#include <stdio.h>
#include <stdlib.h>
struct Car{       //汽车“类”char *color ;  //颜色char *brand;   //品牌char *type;    //车型int year;      //年限void (*printCarInfo)(char *color,char *brand,char*type,int year);  //函数指针,指向车介绍函数void (*carRun)(char *type);       //函数指针,指向车运行的函数void (*carStop)(char * type);     //函数指针,执行车停止的函数
};void bwmThreePrintCarInfo(char *color,char *brand,char *type,int year)
{printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",brand,type,color,year);}
void AodiA6PrintCarInfo(char *color,char *brand,char *type,int year)
{printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",brand,type,color,year);}int main()
{struct Car BWMthree;BWMthree.color ="白色";BWMthree.brand ="宝马";BWMthree.type ="3系";BWMthree.year =2025;BWMthree.printCarInfo =bwmThreePrintCarInfo;BWMthree.printCarInfo(BWMthree.color,BWMthree.brand,BWMthree.type,BWMthree.year);struct Car *AodiA6;AodiA6 =(struct Car*)malloc(sizeof(struct Car));AodiA6->color="黑色";AodiA6->brand ="奥迪";AodiA6->year =2025;AodiA6->type ="A6";AodiA6->printCarInfo=AodiA6PrintCarInfo;AodiA6->printCarInfo(AodiA6->color,AodiA6->brand,AodiA6->type ,AodiA6->year);return 0;
}

放到C++下

问题①  char * 要换成 string 

问题② 要将结构体struct 换成类 class  且将私有换成public 

问题③ 要将printf 换成结构体的形式cout输出

问题④ 在C++中,通过std::to string ()函数,将整形数转化为字符串

问题⑤ 如果采用指针的形式 那么不能用malloc  要使用 Car *AodiA6 =new Car(); 

如下:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace  std;class Car{       //汽车“类”
public:string color ;  //颜色string brand;   //品牌string type;    //车型int year;      //年限void (*printCarInfo)(string color,string brand,string type,int year);  //函数指针,指向车介绍函数void (*carRun)(string type);       //函数指针,指向车运行的函数void (*carStop)(string type);     //函数指针,执行车停止的函数
};void bwmThreePrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}
void AodiA6PrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}int main()
{Car BWMthree;BWMthree.color ="白色";BWMthree.brand ="宝马";BWMthree.type ="3系";BWMthree.year =2025;BWMthree.printCarInfo =bwmThreePrintCarInfo;BWMthree.printCarInfo(BWMthree.color,BWMthree.brand,BWMthree.type,BWMthree.year);Car *AodiA6=new Car();//AodiA6 =(struct Car*)malloc(sizeof(struct Car));AodiA6->color="黑色";AodiA6->brand ="奥迪";AodiA6->year =2025;AodiA6->type ="A6";AodiA6->printCarInfo=AodiA6PrintCarInfo;AodiA6->printCarInfo(AodiA6->color,AodiA6->brand,AodiA6->type ,AodiA6->year);return 0;
}

真正的成员变量   在class中 不需要像结构体一样 进行传参 

一般在类的外部进行成员函数的实现 在class中只需要进行函数的引用

外部时

void Car::realPrintCarInfo()

{

}

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>using namespace  std;class Car{       //汽车“类”
public://成员数据string color ;  //颜色string brand;   //品牌string type;    //车型int year;      //年限//其实也是成员数据,指针变量,指向函数的变量,而并非真正的成员函数void (*printCarInfo)(string color,string brand,string type,int year);  //函数指针,指向车介绍函数void (*carRun)(string type);       //函数指针,指向车运行的函数void (*carStop)(string type);     //函数指针,执行车停止的函数void realPrintCarInfo();    //声明成员函数};
void Car::realPrintCarInfo()  //在类的外部进行成员函数的实现
{string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;
}void bwmThreePrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}
void AodiA6PrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}int main()
{Car BWMthree;BWMthree.color ="白色";BWMthree.brand ="宝马";BWMthree.type ="3系";BWMthree.year =2025;//BWMthree.printCarInfo =bwmThreePrintCarInfo;//BWMthree.printCarInfo(BWMthree.color,BWMthree.brand,BWMthree.type,BWMthree.year);BWMthree.realPrintCarInfo();Car *AodiA6=new Car();//AodiA6 =(struct Car*)malloc(sizeof(struct Car));AodiA6->color="黑色";AodiA6->brand ="奥迪";AodiA6->year =2025;AodiA6->type ="A6";//AodiA6->printCarInfo=AodiA6PrintCarInfo;//AodiA6->printCarInfo(AodiA6->color,AodiA6->brand,AodiA6->type ,AodiA6->year);AodiA6->realPrintCarInfo();return 0;
}

在C++中,一个类包含另一个类的对象成为组合。这种关系通常白哦是一种拥有的关系

class Car{       //汽车“类”
public://成员数据string color ;  //颜色string brand;   //品牌string type;    //车型int year;      //年限Wheel wl;Wheel *pwl;//其实也是成员数据,指针变量,指向函数的变量,而并非真正的成员函数void (*printCarInfo)(string color,string brand,string type,int year);  //函数指针,指向车介绍函数void (*carRun)(string type);       //函数指针,指向车运行的函数void (*carStop)(string type);     //函数指针,执行车停止的函数void realPrintCarInfo();    //声明成员函数};

class中包含class

class Wheel
{
public:string brand;string year;void wheelPrintInfo();};void Wheel::wheelPrintInfo()
{cout << "我的轮胎品牌是 " << brand << endl;cout << "我的轮胎日期是"  << year << endl;}
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>using namespace  std;
//在C++中,一个类包含另一个类的对象成为组合
class Wheel
{
public:string brand;string year;void wheelPrintInfo();};void Wheel::wheelPrintInfo()
{cout << "我的轮胎品牌是 " << brand << endl;cout << "我的轮胎日期是"  << year << endl;}class Car{       //汽车“类”
public://成员数据string color ;  //颜色string brand;   //品牌string type;    //车型int year;      //年限Wheel wl;Wheel *pwl;//其实也是成员数据,指针变量,指向函数的变量,而并非真正的成员函数void (*printCarInfo)(string color,string brand,string type,int year);  //函数指针,指向车介绍函数void (*carRun)(string type);       //函数指针,指向车运行的函数void (*carStop)(string type);     //函数指针,执行车停止的函数void realPrintCarInfo();    //声明成员函数};
void Car::realPrintCarInfo()  //在类的外部进行成员函数的实现
{string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;
}void bwmThreePrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}
void AodiA6PrintCarInfo(string color,string brand,string type,int year)
{//printf("车的品牌是 :%s,型号是 :%s,颜色是: %s,上市年限是: %d\r\n",//brand,type,color,year);string str = "车的品牌是:" + brand+ ",型号是:" + type+ ",颜色是:"  + color+",上市年限是:" + to_string(year);cout << str << endl;}int main()
{Car BWMthree;BWMthree.color ="白色";BWMthree.brand ="宝马";BWMthree.type ="3系";BWMthree.year =2025;BWMthree.pwl = new Wheel();BWMthree.pwl->brand="米其林";BWMthree.pwl->year="2025";BWMthree.realPrintCarInfo();BWMthree.pwl->wheelPrintInfo();// BWMthree.wl.brand="米其林";//BWMthree.wl.year ="2025";//BWMthree.wl.wheelPrintInfo();//BWMthree.printCarInfo =bwmThreePrintCarInfo;//BWMthree.printCarInfo(BWMthree.color,BWMthree.brand,BWMthree.type,BWMthree.year);Car *AodiA6=new Car();//AodiA6 =(struct Car*)malloc(sizeof(struct Car));AodiA6->color="黑色";AodiA6->brand ="奥迪";AodiA6->year =2025;AodiA6->type ="A6";AodiA6->pwl = new Wheel();AodiA6->pwl->brand="马牌";AodiA6->pwl->year="2025";AodiA6->realPrintCarInfo();AodiA6->pwl->wheelPrintInfo();//AodiA6->wl.brand = "马牌";//AodiA6->wl.year =2025;//AodiA6->printCarInfo=AodiA6PrintCarInfo;//AodiA6->printCarInfo(AodiA6->color,AodiA6->brand,AodiA6->type ,AodiA6->year);//AodiA6->wl.wheelPrintInfo();return 0;
}

注意指针 时要设立新的new

相关文章:

  • 西门子 S7-1200 PLC 海外远程运维技术方案
  • DAX权威指南8:DAX引擎与存储优化
  • 第七章:未名湖畔的樱花网关
  • 书籍推荐 --- 《筚路维艰:中国经济社会主义路径的五次选择》
  • 【信息系统项目管理师-案例真题】2025上半年(第二批)案例分析答案和详解(回忆版)
  • ​​Java 异常处理​​ 的详细说明及示例,涵盖 try-catch-finally、自定义异常、throws 与 throw 的核心概念和使用场景
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
  • Benchmarking Potential Based Rewards for Learning Humanoid Locomotion
  • 关于锁策略的简单介绍
  • 固态继电器与驱动隔离器:电力系统的守护者
  • C++.OpenGL (6/64)坐标系统(Coordinate Systems)
  • 为什么要对邮件列表清洗?
  • C++ --- vector
  • 深入理解指针(二)
  • [蓝桥杯]整理玩具
  • 如何使用 Bulk Rename Utility 批量为文件名添加统一后缀?
  • CountDownLatch和CyclicBarrier
  • 森马下沙奥莱旗舰店盛大启幕:以“新常服“理念重塑消费体验新范式
  • 7.2.1_顺序查找
  • 基于最大相邻夹角的边缘点提取(matlab)
  • 为什么很少用python做网站/seo怎么刷关键词排名
  • wordpress好看的下载插件/河北seo推广方案
  • 做视频网站推广/市场营销计划书模板
  • 公司建设网站公司/成都seo专家
  • 苏州网站搜索优化/seo搜索引擎优化兴盛优选
  • 高清vpswindows在线看/冯耀宗seo教程