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 }
View Code

 

以上是关于C++复习第四天(重载,封装)的主要内容,如果未能解决你的问题,请参考以下文章

封装继承和多态,重写重载等基础复习

复习第四天

复习第四天

基础班第四天-复习

Java学习基础的第四天 for循环,Java语法中的方法,方法的重载,可变参数,递归,数组

学习Vue第四天