C++复习第四天(重载,封装)
Posted ElevHe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++复习第四天(重载,封装)相关的知识,希望对你有一定的参考价值。
函数重载,可以让函数名相同,提高复用性
#include <iostream> using namespace std; /* 重载需要满足的条件: 1.发生在同一作用域下 2.函数名称相同 3.函数参数类型、个数、顺序不同 */ void func() cout <<"func()" << endl; void func(int a) cout <<"func(int a)" << endl; void func(double a) cout <<"func(double a)" << endl; void func(int a, double b) cout <<"func(int a, double b)" << endl; void func(double a, int b) cout <<"func(double a, int b)" << endl; /*注意 函数的返回值不可以作为函数重载的条件,如下,是不被允许的 int func(double a, int b) cout <<"func(double a, int b)" << endl; */ int main() func(); func(10); func(3.14); func(3,3.14); func(3.14,3); return 0;
函数重载的注意事项
1.引用作为重载条件
2.函数重载碰到函数默认参数
#include <iostream> using namespace std; /* 重载注意事项: 1.引用作为重载条件 */ void func(int &a) // int &a = 10; 不合法 cout << "func(int &a)" << endl; void func(const int &a) // const int &a = 10; 合法 cout << "func(const int &a)" << endl; /* 重载注意事项: 2.函数重载碰到函数默认参数 */ void func2(int a, int b = 10) cout << "func2(int a, int b)" << endl; void func2(int a) cout << "func2(int a)" << endl int main() int a = 10; func(a); //调用无const func(10); //调用有const // func2(10); 当函数重载碰到默认参数,出现二义性报错,尽量避免默认参数的情况 return 0;
C++三大特性:封装、继承、多态
封装
封装的意义:
1.将属性和行为作为一个整体,表现生活中的事物
2.将属性和行为加以权限控制
class 类名 访问权限: 属性 / 行为;
设计一个圆类,求圆的周长
#include <iostream> using namespace std; const double PI = 3.14; class Circle //访问权限 public: //属性 int r; //行为 double calculateD() return 2 * PI * r; ; int main() // 通过圆类,创建具体的圆(对象) // 实例化,通过一个类创建一个对象的过程 Circle c1; //给圆对象的属性进行赋值 c1.r = 21; cout << "圆的周长为:" << c1.calculateD() <<endl; return 0;
C++第十四天笔记2016年03月10日(周四) A.M
1. 线性结构:链表和数组
数组:可以访问任意位置的元素。添加删除操作相对麻烦。
链表:添加删除效率相对较高。只能从第一个元素开始访问。
访问较多:数组。添加删除较多:链表。
数组:元素类型 数组名[元素个数];
2. 如何创建链表:
链表:链表中的每一个元素称为节点。
节点:数据域(存储数据)和指针域(存储下一节点的地址编号)。
3. 双向链表:数据域和指针域(包含两个,其中一个指向下一个节点,另外一个指向上一个节点)
4. 头结点:链表中的第一个节点
空链表:链表中无任何节点。
1 #include <iostream> 2 #include "stdio.h" 3 #include "stdlib.h" 4 #include "cstring" 5 using namespace std; 6 7 #define N 10 8 //创建节点 9 typedef struct Node{ 10 11 char name[20]; 12 int age; 13 struct Node* link; 14 }Student; 15 16 Student* createList(int n) 17 { 18 Student* head = NULL; //头节点 19 Student* pNode = NULL; //动态节点 20 Student* sNode = NULL; //每次创建新的节点 21 if ((head = (Student*)malloc(sizeof(Student))) == NULL) 22 { 23 printf("Fail...\n"); 24 return NULL; 25 } 26 //头节点初始化 27 strcpy(head->name, "HeadNode"); 28 head->age = 25; 29 head->link = NULL; 30 //动态节点指向头节点: 31 pNode = head; 32 for (int i=0; i < n-1; ++i) 33 { 34 if ((sNode = (Student*)malloc(sizeof(Student))) == NULL) 35 { 36 printf("Fail...\n"); 37 return NULL; 38 } 39 //节点指针指向下一个节点 40 pNode->link = sNode; 41 cout << "Name:" ; 42 cin >> sNode->name; 43 cout << "Age:"; 44 cin >> sNode->age; 45 sNode->link = NULL; 46 pNode =sNode; 47 } 48 return head; 49 } 50 //链表打印 51 void showNode(Student* head) 52 { 53 Student* pNode; 54 pNode = head; 55 while (pNode != NULL) { 56 cout << "*******************************\n"; 57 cout << "Name:" << pNode->name; 58 cout << " Age:" << pNode->age; 59 cout << "\n"; 60 pNode = pNode->link; 61 } 62 } 63 //链表回收 64 void freeList(Student* h){ 65 66 while (h != NULL) 67 { 68 Student* p; 69 h = h->link; 70 free(p); 71 p = h; 72 } 73 74 } 75 76 //插入节点 77 void insertNode(Student* pNode) 78 { 79 Student* sNode = (Student*)malloc(sizeof(Student)); 80 cout << "please input the insertNode information\n"; 81 cout << "Name:" ; 82 cin >> sNode->name; 83 cout << "Age:"; 84 cin >> sNode->age; 85 sNode->link = pNode->link; 86 pNode->link = sNode; 87 } 88 //查询节点 89 Student* searchNode(Student* head, char* name) 90 { 91 Student* pNode = head; 92 while (pNode != NULL) { 93 if (strcmp(pNode->name, name) == 0) { 94 return pNode; 95 } 96 pNode = pNode->link; 97 } 98 return pNode; 99 } 100 101 Student* deleteNode(Student* head, char* name) 102 { 103 if (head == NULL) { 104 return NULL; 105 } 106 Student* p1 = head; 107 Student* p2 = head->link; 108 109 //判断删除的是否是头节点 110 if (strcmp(p1->name, name) == 0) { 111 head = head->link; 112 free(p1); 113 return head; 114 } 115 116 //判断删除后面的节点 117 while ( p2 != NULL) 118 { 119 if (strcmp(p2->name, name) == 0) 120 { 121 p1->link = p2->link; 122 free(p2); 123 return head; 124 } 125 p1 = p2; 126 p2 = p2->link; 127 } 128 return head; 129 } 130 131 int main(int argc, const char * argv[]) 132 { 133 Student* head = createList(4); 134 Student* sNode = searchNode(head, "b"); 135 insertNode(sNode); 136 showNode(head); 137 deleteNode(head,"b"); 138 cout<< "\n删除名字为b的节点后链表为:\n"; 139 showNode(head); 140 freeList(head); 141 return 0; 142 }
以上是关于C++复习第四天(重载,封装)的主要内容,如果未能解决你的问题,请参考以下文章