C++学习记录-面向对象-友元2
C+±学习记录-面向对象-友元2 一、友元的实现方式 1.全局函数做友元 2.类做友元 3.成员函数做友元 (1)、全局函数做友元 语法: friend 返回值类型 函数名(参数列表){ }; 示例: 123456789101112131415class p { friend void setp(p* p1);//将该函数设置为p类的友元public: string name;protected: string age;};void setp(p *p1) { p1->name = "神里绫华"; p1->age = "十八岁";} (2)、类做友元(友元类) 语法:friend class 类名; 示例: 12345678910111213141516class chara {public: string name;private: string weapon;};class search {public: void...
C++-学习记录-面向对象-友元1.概论
C+±学习记录-面向对象-友元1.概论 在类中,有一些私有、受保护属性也想让一些特定的函数或类进行访问,就要用到友元 友元的关键字为 friend 友元实现的方式: 1.全局函数做友元 2.类做友元 3.成员函数做友元 友元的本质是:签发通行证 示例: 123456789101112class p {public: string name;protected: string age;};void setp(p *p1) { p1->name = "神里绫华"; p1->age = "十八岁";}//此时程序会报错,age为protected权限,外部无法访问它。 此时可以在p类中为“setp”签发一张“通行证”,即友元 12345678910111213141516class p { friend void setp(p* p1);//将该函数设置为p类的友元public: string name;protected: string age;};void...
C++学习记录-面向对象-对象成员
C+±学习记录-面向对象-对象成员 一、对象成员 在C++的类中,类内的成员可以是其他类的对象,我们把这种成员称为对象成员 示例: 12345678910111213141516171819202122232425262728293031class p {public: string name;public: p(string n):name(n) { cout << "p的构造函数被调用" << endl; } ~p() { cout << "p的析构函数被调用" << endl; }};//创建一个p类//接下类创建一个a类class a {public: string aname; p p1;//a类中包含了p类的对象,此为对象成员 public: a(string n, string m) :aname(n), p1(m) { cout <<...
C++学习记录-面向对象:构造函数和析构函数
C+±学习记录-面向对象-构造函数和析构函数 0.重要性 对象的初始化和清理十分重要。如果对象没有初始化,使用的后果是未知。如果对象没有及时清理也会有问题。C++使用了构造函数和析构函数来解决这个问题。 构造函数和析构函数由编译器调用,不可手动调用。 1.构造函数 类名(参数){} 1.在类里面,构造函数一定要有,如果没有编译器会生成一个空的 2.构造函数用来给对象的成员属性赋值,初始化。在程序调用对象时会且只会调用一次 3.构造函数可以传入参数,因此可以发生重载。 4.函数名和类名相同。 5.构造函数没有返回值也不写void 2.析构函数 ~类名(){} 1.在类里面,析构函数一定要有,如果没有编译器会生成一个空的 2.析构函数用来执行一些清理操作,在对象销毁前由程序调用且只会调用一次 3.析构函数不可以有参数,因此不可以发生重载 4.函数名和类名相同,前面加上~ 5.析构函数没有返回值也不写void 3.练习一下 12345678910111213141516171819202122232425class charactor {public: string...
C++学习记录-面向对象:class
C++学习记录-面向对象:class 1.创建一个类(在全局区创建) class 类名{ 访问权限: 属性 访问权限: 方法 } 方法也可以在类内声明,类外定义 语法:返回值类型 类名::函数名(参数){} (访问权限不影响类外实现) 示例: 123456789101112class character{ public: string name; string weapon;//定义类的属性 public: void printinfo(){ cout<<name<<" "<<weapon<<endl; }//定义类的方法}//方法也可以在类内声明,类外定义void...
C++学习记录-对字符数组的一些操作
C++学习记录-对字符数组的一些操作 注意包含头文件 <string.h> 一、字符数组连接函数strcat 语法: strcat(指向字符数组1的指针,指向字符数组2的指针) 在visual studio中为 strcat_s 作用:将字符数组2连接到字符数组1的后面,字符数组2保持不变 示例: 12345678char a[10] = {'a'};char b[] = { "Hello" };strcat_s(a, b);cout << a << " "<<b<<endl;//a变为 ahello,b还是hello 注意:要保证数组1的长度足够,否则会报错 二、字符数组求长度函数strlen 语法:strlen(指向字符数组的指针) 作用:求字符数组的长度,遇到“占位符\0”就会停下来 示例: 12char a[]={"hello"};int...
C++学习记录-内存四区
C++学习记录-内存四区 一、代码区 存放函数体的二进制代码(CPU指令)。代码区是共享的,代码区是只读的 二、全局区 全局区存放全局变量,静态变量(static 关键字),常量 三、栈区 栈区存放函数的参数值,局部变量等 栈区开辟的内存由编译器释放,不要返回局部变量的地址 四、堆区 堆区的内存由程序员手动释放,若无释放则有程序结束时自动释放 用new关键字可以在堆区开辟内存,用delete关键字可以释放堆区的数据 示例: 12int *p=new int(10);delete p;
C++学习记录-结构体
C++学习记录-结构体 一、结构体 结构体是程序员自定义的一个变量类型。这个变量类型通常包含了多个属性。定义结构体后可以像变量一样对其赋值,输出等操作。 通常,我们利用结构体数组来方便维护 示例 12345678910111213141516171819202122//定义一个角色结构体struct charactor{ string name; string shuxin; string weapon;}int main(){ //创建结构体数组 charactor arr[2]; //赋值 arr[0]={ "神里绫华", "冰", "单手剑" }; arr[1]={ "胡桃", "火", "长枪" ...
C++学习记录-递归的运行顺序
C++学习记录-递归的运行顺序 递归的运行顺序: 示例代码: 123void Print(int N) { if (N!=0) { Print(N - 1); cout << N; }} 传入 N=3 1.本层函数记为一层,N不等于0,执行if内的语句,调用自身(记为第二层)并传入2(N-1=2) 2.第二层函数运行,N不等于0,执行if内的语句,调用自身(记为第三层)并传入1(N-1=1) 3.第三层函数运行,N不等于0,执行if内的语句,调用自身(记为第四层)并传入0(N-1=0) 4.第四层函数运行,N等于0,结束,返回上一层(第三层)的断点处,第三层继续运行 5.第三层打印1,结束,返回上一层(第二层)的断点处,第二层继续运行 6.第二层打印2,结束,返回上一层(第一层)的断点处,第一层继续运行 7.第一层打印3,结束。 **总结:**递归在调用一个函数后,会先把调用的函数运行完,再返回自身的断点处继续运行
C++零碎知识记录
C++零碎知识记录 **一、**else总是与尽可能近的if配对 二、 switch语句的使用: 12345678switch(表达式){ case 常量1 : 执行的语句; break; case 常量2 : 执行的语句; break;} 三、各种运算符的优先级 C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下: **第1优先级:**各种括括号,如()、[]等、成员运算符 ....





