
C++
本专栏讲解C++相关语法,并配有代码样例。
pfeiKing
安安静静地先稳住
展开
-
C++ String常规操作
1、获得长度int len = s.length();2、连接字符串s = s1 + s2;3、比较字符串s1 < s24、倒置串reverse(s.begin(), s.end());5、字符串转字符数组char* c = new char[30];strcpy(c, s.c_str());6、查找串(1)int pos = s1.find(...原创 2020-03-21 17:50:42 · 337 阅读 · 0 评论 -
C++使用类之运算符重载
#include<iostream>#include<cstdio>#include<cstring>using namespace std;class Time{ private: int hours; int minutes; public: Time(); Time(int h, int m = 0); void add...原创 2020-02-08 21:34:08 · 255 阅读 · 0 评论 -
C++引用
本文讲解C++中引用变量,以及引用变量与函数的结合应用原创 2020-02-07 20:39:01 · 213 阅读 · 0 评论 -
C++函数指针详解
详细讲解函数指针的作用,声明,赋值,使用,附有代码。原创 2020-02-05 17:26:09 · 4929 阅读 · 0 评论 -
C++指针详细讲解
详细讲解C++中指针的原理以及应用,附加代码样例。原创 2020-02-04 22:57:37 · 3035 阅读 · 2 评论 -
C++带默认参数的函数值
函数定义时可以预先声明默认的形参值:带数字的全放右侧WRONG: int add(int x=1,int y=2,int z);WRONG : int add(int x=1,int y,int z=2);RIGHT : int add(int x,int y=1,int z=2);如果调用函数是,相应形参位置传入了实参,那么使用实参,如果没有传参,使用默认形参值。相同作用原创 2018-01-02 22:04:55 · 361 阅读 · 0 评论 -
C++内联函数inline
内联函数:不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。声明:inline 类型说明符 函数名(形参) {P...}什么函数,需要内联,什么不需要内联,每个编译器评判的标准不一,如果函数代码简单,少,非递归那么可以作为内联函数,但是如果将递归,复杂,冗长的函数作为内联函数,编译器会自动将其转化为普通函数处理。原创 2018-01-02 21:56:29 · 243 阅读 · 0 评论 -
C++typedef声明,enum枚举类型
typedef 声明typedef 已有类型名 新类型明;typedef double Area,Volume;typedef int age;age ag1,ag2;Area a;Vloume v;enum 枚举类型首先,enum 枚举类型名 {变量值列表};enum weekday{sun,mon,tue,wed,thu,fri,sat};默原创 2018-01-02 21:29:59 · 3436 阅读 · 0 评论 -
C++多文件结构和编译预处理命令
一般一个项目至少划分3个部分:类定义文件,类实现文件,类使用文件。外部变量:在源文件1中定义的变量,可以在源文件2通过关键字加以声明之后应用。//源文件1#includeusing namespace std;int i=1;int main(){ i++; return 0;} //源文件2#includeusing namespace std;extern原创 2018-01-06 22:36:45 · 516 阅读 · 0 评论 -
C++数组与指针
数组对象数组的初始化class Fun{ public: Fun(int rx,int ry):x(rx),y(ry){ } private: int x,y;};调用Fun fun[2]={Fun(1,2),Fun(3,4)}; 指针指针运算: p1-n1:p1当前位置前方第n1个 pl++:下一个 p1--:前一个原创 2018-01-07 16:34:49 · 304 阅读 · 0 评论 -
C++动态内存分配和使用vector创建数组对象
基本类型变量int *point;point = new int(2);//申请int型内存空间,初始值2point = new int;或者是 point = new int();//初始值0释放空间:delete point;数组int *p = new int[10]();//数组长为10,初始值0释放空间:delete[] point;多维数组int *原创 2018-01-08 10:06:14 · 1582 阅读 · 0 评论 -
C++深复制和浅复制
类中有默认的复制构造函数,或者是自己定义的复制构造函数,那么对于下面一段代码#includeusing namespace std;class Fun{ public: Fun(int rx):x(rx){} Fun(Fun &fun); private: int x;};Fun::Fun(Fun &fun){ x = fun.x;}int main(){原创 2018-01-08 10:29:43 · 338 阅读 · 0 评论 -
C++字符串string
构造函数string();//建立一个长度为0的字符串string(const string &rhs);//复制构造函数string(const char *s);//用指针s所指向的字符串常量初始化string类的对象string(const &rhs,unsigned int pos,unsigned int n);//rhs串从pos开始取n个字符,用来初始化string类原创 2018-01-08 11:01:33 · 450 阅读 · 0 评论 -
C++类的继承与派生(一)
<1>继承:顾名思义将基类的成员继承下来为本类所用。派生:在继承基类的成员的同时,本来添加的新的成员,为派生出来的成员。派生类得到基类中除了构造函数,析构函数之外的所有成员。<2>派生类生成的过程:吸收基类成员,改造基类成员,添加新的成员<3>访问控制第一,公有继承:基类的公有,保护成员访问属性在派生类保持不变,基类的私有成员不能直接访问。...原创 2018-01-09 17:28:43 · 539 阅读 · 0 评论 -
C++类的继承与派生(二)
<1>派生类成员的标识符和访问:派生类中的成员访问属性有如下四种第一,不可访问成员:从基类私有成员继承而来,派生类本身和派生类对象无权访问,继续继承的新类也无权访问。第二,私有成员:从基类的成员继承而来和新增成员,派生类内部可以访问,建立的对象无权访问,在继续继承的派生类变成不可访问成员。第三,保护成员:从基类的成员继承而来和新增成员,派生类内部可以访问,建立的对象无权访问...原创 2018-01-10 10:26:55 · 383 阅读 · 0 评论 -
C++函数重载
函数的重载:两个及以上函数具有相同的函数名,但是形参个数或者类型不同,编译器通过传入的形参个数和类型进行函数的匹配,自动确定调用哪一个函数。形参类型不同 int add(int x,int y); int add(double x,double y);原创 2018-01-03 09:40:23 · 259 阅读 · 0 评论 -
C++类与对象(一)
<1>抽象:数据抽象和行为抽象(你是谁,你做什么工作)<2>封装:将抽象的数据和行为相结合(你和你做的工作结合成了社会上的你)<3>类的定义class 类名{ public: 外部接口 protected: 保护型成员 private: 私有成员 };<4>类成员的访问控制:public(公有类...原创 2018-01-03 10:27:08 · 314 阅读 · 0 评论 -
动态分配内存
动态分配:new type 动态分配数组:new type [] 释放空间:delete expr(指针) 释放空间数组:delete [] exprnew返回的是动态开的内存的首地址 ,如果没有足够的内存空间,其结果为一个0值指针 int *p=new int(12); 销毁对象后,指针没有定义原创 2016-06-13 09:09:36 · 344 阅读 · 0 评论 -
静态成员函数和友元
静态数据成员:能够实现同类的多个对象之间的数据共享 static 数据成员类型 数据成员列表; 静态数据成员必须在类外部定义一次(仅有一次),不可以通过类构造函数进行初始化 数据成员类型 类名::静态数据成员名=初始化式; 静态成员函数:static 返回类型 函数名(类型1 参数名1,类型2 参数名2,。。。。。); ~调用:(::)和通过对象名调用静态成员原创 2016-06-13 21:10:16 · 1194 阅读 · 0 评论 -
const
const 数据类型定义为只读常对象:const 类名 对象1(实参列表),...; ~常对象的数据成员都是const的,不能被修改。 ~不能调用常对象中的非const型成员函数 ~如果一定要修改常对象的某个数据成员的值,可以将数据成员声明为mutable来修饰它的值。 mutable 数据成员类型 数据成员列表常数据成员:const 数据成员类型 数据成员列表;原创 2016-06-13 21:11:38 · 278 阅读 · 0 评论 -
类的继承与派生
友元关系不能继承。一方面,基类的友元对派生类的成员没有特殊的访问权限。另一方面,如果基类被授予友元关系,则只有基类具有特殊访问权限,给基类的派生类不能访问授予友元关系的类。无论从基类派生出多少个派生类,每个静态成员只有一个实例。静态成员遵循常规访问控制:如果静态成员在基类中为私有的,则派生类不能访问它,如果是公有的,那么基类派生类都可以访问它。原创 2016-06-14 09:22:02 · 296 阅读 · 0 评论 -
派生类成员的访问
类的protected:不可以被类用户访问,但是可以被派生类访问。只有基类类成员和其友元可以访问基类的private部分,派生类不能访问基类的私有成员。访问派生类的访问权限: ~1.基类的类成员和友元可以访问基类成员,派生类的类成员和友元可以访问派生新增的类成员。私有成员只能被同一个类中的类成员访问,公有成员可以被类用户访问。 ~2.基类的成员访问派生类新增的成原创 2016-06-14 10:03:59 · 794 阅读 · 0 评论 -
UDP 多客户端聊天+多客户端文件上传下载(C++/MFC)
工具:C++/MFC 原理:1. 服务器与客户端之间的通讯,通过socket套接字2. 一个电脑有一个ip地址,和6万多的端口号3. 当一个socket被创建,就会有一个ip和端口号联系到socket上4. 一个应用程序,可以设置多个端口,即:客户端可以设置多个socket5. 一个电脑相当于ip,电脑上的应用程序的原创 2016-12-18 16:36:59 · 4222 阅读 · 5 评论 -
C++函数的参数传递(值传递和引用传递)
值传递 :形参获得值之后与实参脱离关系引用首先,引用的定义和使用如下:#includeusing namespace std;int main(){ int a=56; int &ai=a; cout<<"a="<<a<<" ai="<<ai<<endl; a=96; cout<<"a="<<a<<" ai="<<ai<<endl; ai=15; cout<<"原创 2018-01-02 21:51:42 · 2184 阅读 · 0 评论 -
C++多态性(一)运算符重载
<1>运算符重载为成员函数双目运算符:+,-#include<iostream>using namespace std;class Complex{ public: Complex(double r=0.0,double i=0.0):real(r),imag(i){} Complex operator+(const Complex &...原创 2018-01-15 12:15:29 · 635 阅读 · 0 评论 -
C++共享数据的保护(常对象,常成员,常引用)
常对象:必须进行初始化并且不能被修改。class Fun{ public: Fun(int rx):x(rx){} private: int x;};const Fun funa(2);常成员函数:类型说明符 函数名(参数表)const; 1 在函数的定义部分也要带上const关键字。2 如果一个对象是常对象,那么常对象只能调用常成员函数,原创 2018-01-05 10:55:11 · 763 阅读 · 0 评论 -
C++类的友元
如何理解友元:不同类或者对象的成员函数之间,类的成员函数与一般函数之间进行数据共享。友元函数:友元函数实在类中用关键字friend修饰的非成员函数。友元函数可以是其他类的成员函数也可以是一个普通的函数,但是在它的函数体中可以通过对象名访问类的私有成员。class Fun{ public: friend void FUNCTION(Fun ra); private: int原创 2018-01-04 20:20:11 · 269 阅读 · 0 评论 -
C++对象的生存周期和类的静态成员
对象的生存周期静态生存周期:全局变量具有静态生存周,局部变量的静态数据的特点:函数内的静态变量,不会随着函数调用的结束而消亡。动态生存周期:除了上述两种情况以外其它都具有动态生存周期,局部生存对象诞生于声明点,结束语所在块执行完毕之后。类的静态成员第一,静态数据成员:一个类的所有对象公有的属性静态成员在每个类中只有一个副本,由该类的所有对象共同维护和使用,从而实现了同一类的不同原创 2018-01-04 19:22:50 · 2536 阅读 · 0 评论 -
C++标识符的作用域和可见性
作用域第一,函数原型作用域:函数内的变量,和形参的当函数运行结束时就失效了。第二,局部作用域:一个for循环内定义的一个变量或者是if内定义的变量等等。第三,类作用域:1,类的成员函数;2,类的静态成员X::m;3,类的指针ptr->m第四,命名空间作用域:namespace 命名空间名{ 命名空间内的各种声明 } 具体一个例子如下:namespace W原创 2018-01-04 17:24:04 · 1139 阅读 · 0 评论 -
C++结构体和联合体
结构体:和类是基本一样的,唯一的区别在于,二者具有不同的默认访问控制属性class Fun{ int x;//私有成员 int y;//私有成员 protected: P... public: P... };struct node{ int x;//共有成员 int y;//共有成员 private: P... protected: P...原创 2018-01-04 16:25:27 · 1343 阅读 · 0 评论 -
C++前向引用声明
A类有B类对象,B类有A类对象,循环依赖,但是只有先定义才能定义对象,因此,若要实现循环依赖需要使用前向引用声明。class B;//前向引用声明 class A{ public: void functionA(B b); P...};class B{ public: void functionB(A a); P...};三个注意点第一,在没有提原创 2018-01-04 10:17:36 · 1701 阅读 · 0 评论 -
C++类的组合
组合:一个大类中包含很多子类class FunA{ P...};class FunB{ P...};class Fun{ public: P... private: FunA funa; FunB funb; P...};组合类的构造函数:当给一个组合类传参数时,同时要给子类传参。关键要理解为什么这么做?一般情况下,数据成员会定义为类的私原创 2018-01-04 09:39:51 · 2152 阅读 · 0 评论 -
C++类与对象(二)构造函数和析构函数
类与对象的关系就是共性与个性,一般与特殊的关系,世界的物质性,是普遍存在于万物,是万物的共性,但是个性离不开共性,共性寓于个性之中。不同对象之间的区别有二:第一,对象的名称不同,第二,对象自身的属性值,数据成员的值不同。<1>构造函数:在对象被创立的时候利用特定的值去构造对象,将对象初始化为一个特定的状态。首先,构造函数是类的一个成员函数(public),构造函数的函数名与...原创 2018-01-03 17:23:53 · 448 阅读 · 0 评论 -
结构体和联合体
点击打开链接联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型总结:声明一个联合体:[cpp] view plaincopyprint?union abc{ int i; c转载 2015-09-17 19:50:18 · 492 阅读 · 0 评论