C++类和对象

Posted 皓月肥波

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++类和对象相关的知识,希望对你有一定的参考价值。

C++类和对象

类和对象的基本概念

  • 什么是类,一系列事物的抽象,万物皆可为类

    • 类有两部分组成:属性和行为

    • 属性:事物的特征--->数据类型描述

    • 行为:事物的操作--->函数描述

  • 什么是对象:类的具体化,类的实例化

  • 类的特点:封装、继承、派生、多态

类的定义

  • 创建语法

    class 类名
    
    //权限限定词
        public:
        protected:
        private:
    ; 

  • 权限限定 作用

    • 类外只能访问public属性内的东西,习惯把 public属性 叫做类外的接口

    • 类外访问 类中的数据,只能通过对象访问,当然static成员除外

      • protected和private 类外都不可以访问 ,但是可以提供共有接口间接访问

      • 默认属性(没有写在权限限定词下的属性)是 私有属性

      • 权限限定词,只是用来限定类外的访问,并不是限定类中的访问

      • protected和private 有区别 ,继承有区别,对类外都是不可以访问

    • C++结构体 在一定程序可以直接 当作是类

      • 默认属性是公有属性

        #include<iostream>
        #include<string>
        using namespace std;
        class BoyFriend
        
            void print()
            
                cout << "不在限定词之下的属性,默认为私有属性" << endl;
            
        public:
            void printData()
            
                cout << m_name << "\\t" << m_age << endl;
            
            void initData(string name, int age);
        protected:
            string m_name;
        private:
            int m_age;
        ;
        void BoyFriend::initData(string name, int age)
        
            m_name = name;
            m_age = age;
        
        ​
        struct GG
        
            int num;    //默认公有属性
        protected:
            string name;
        private:
            int age;
        ;
        int main()
        
            BoyFriend Tom;
            Tom.initData("Tom", 20);
            Tom.printData();
            return 0;
        

成员访问

  • 通过提供 公有接口传参的方式初始化数据

  • 通过提供 公有接口返回值的方式初始化数据

  • 默认初始化

#include<iostream>
#include<string>
using namespace std;
class BoyFriend

public:
    void initData(string name, int age)
    
        m_name = name;
        m_age = age;
    
    string& getName()
    
        return m_name;
    
    int& getAge()
    
        return m_age;
    
    void print()
    
        cout << m_name << "\\t" << m_age << endl;
    
protected:
    string m_name;
    int m_age;
    
;
​
int main()

    BoyFriend Tom;
    Tom.initData("Tom", 20);
    Tom.print();
    BoyFriend june;
    june.getName() = "june";
    june.getAge() = 19;
    june.print();
    return 0;

单链表三种创建方法

  • C语言

    #include<iostream>
    using namespace std;
    struct Node
    
        int data;
        struct Node* next;               //C语言的需要带上struct
    ;
    struct Node* createList()
    
        Node* headNode = new Node;
        headNode->next = NULL;
        return headNode;
    
    struct Node* createNode(int data)
    
        Node* newNode = new Node;
        newNode->data =data;
        newNode->next = NULL;
        return newNode;
    
    void insertData(Node* headNode, int data)
    
        Node* newNode = createNode(data);
        newNode->next = headNode->next;
        headNode->next = newNode;
    
    void printList(Node* headNode)
    
        Node* p = headNode->next;
        while (p!=NULL)
        
            cout << p->data << " ";
            p = p->next;
        
    
    int main()
    
        Node* List = createList();
        insertData(List, 10);
        insertData(List, 20);
        insertData(List, 30);
        printList(List);
        return 0;
    

  • C++半封装

    #include<iostream>
    using namespace std;
    struct Node
    
        int data;
        Node* next;               //c++不需要带上struct     
    ;
    class List
    
    public:
        void createList()
        
            headNode = new Node;
            headNode->next = nullptr;
        
        void insertData(int data)
        
            Node* newNode = new Node;
            newNode->data = data;
            
            newNode->next = headNode->next;
            headNode->next = newNode;
        
        void printList()
        
            Node* pMove = headNode->next;
            while (pMove != nullptr)
            
                cout << pMove->data << " ";
                pMove = pMove->next;
            
            cout << endl;
        
    protected:
        Node* headNode;             //用一个指针表示整个表头
    ;
    ​
    int main()
    
        List* pList = new List;     //C++第一步:创建对象
        pList->createList();
        pList->insertData(10);
        pList->insertData(20);
        pList->printList();
    

  • C++

    #include<iostream>
    using namespace std;
    class Node
    
    public:
        Node*& getNext()
        
            return next;
        
        int& getData()
        
            return data;
        
    protected:
        int data;
        Node* next;
    ;
    ​
    class List
    
    public:
        void createList()
        
            headNode = new Node;
            headNode->getNext() = nullptr;
        
        void insertData(int data)
        
            Node* newNode = new Node;
            newNode->getData() = data;
    ​
            newNode->getNext() = headNode->getNext();
            headNode->getNext() = newNode;
        
        void printList()
        
            Node* p = headNode->getNext();
            while (p != nullptr)
            
                cout << p->getData() << " ";
                p = p->getNext();
            
            cout << endl;
        
    protected:
        Node* headNode;             //用一个指针表示整个表头
    ;
    ​
    int main()
    
        List* pList = new List;     //C++第一步:创建对象
        pList->createList();
        pList->insertData(10);
        pList->insertData(20);
        pList->printList();
    

修改数据

  • C语言

    • 修改(0级)普通变量 传入一级指针(普通变量地址)

    • 修改该一级指针,传入二级指针

    • 修改该二级指针,传入三级指针

  • C++

    • 通过引用传参

#include<iostream>
using namespace std;
//C++二级指针的创建
/*
int** createArray2D(int row, int cols)    //采用返回值的方式           

    int** pArray =new int*[row];
    if (pArray == NULL)
        return NULL;
    for (int i = 0; i < row; i++)
    
        pArray[i] = new int [cols];              //给一级指针申请
    
    return pArray;

*/
void createArray2D(int**& p, int row, int cols) //传参的方式需要带引用才可修改

    p = new int* [row];
    if (p == nullptr)
    
        return;
    
    for (int i = 0; i < row; i++)
    
        p[i] = new int[cols];
    

//C语言修改二级指针,传入三级指针
void createArray(int*** p, int row, int cols)

    *p = new int* [row];
    for (int i = 0; i < row; i++)
    
        (*p)[i] = new int[cols];
    

​
void deletePoint(int**& p,int row, int cols)

    for (int i = 0; i < row; i++)
    
        delete[] p[i];
    
    delete[] p;

void testArray(int** p, int row, int cols)

    for (int i = 0; i < row; i++)
    
        for (int j = 0; j < cols; j++)
        
            p[i][j] = i * j;
            cout << p[i][j] << "\\t";
        
        cout << endl;
    

int main()

    //int** p = createArray2D(4, 3);
    int** p = nullptr;
    createArray2D(p, 4, 3);
    testArray(p, 4, 3);
    deletePoint(p, 4, 3);
    return 0;

以上是关于C++类和对象的主要内容,如果未能解决你的问题,请参考以下文章

C++类和对象--继承

C++类和对象1

成功创建c ++类和对象[重复]

C++从青铜到王者第二篇:C++类和对象(上篇)

C++类和对象的简单应用举例

C++初阶类和对象