最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++深入分析講解類(lèi)的知識(shí)點(diǎn)

 更新時(shí)間:2022年06月02日 10:36:35   作者:Bright-SKY  
C++類(lèi),是指系統(tǒng)在第一次在程序中遇到一個(gè)類(lèi)時(shí)為這個(gè)類(lèi)建立它的所有類(lèi)變量的拷貝 - 這個(gè)類(lèi)的所有實(shí)例共享它的類(lèi)變量

知識(shí)點(diǎn)引入

C語(yǔ)言中 數(shù)據(jù) 和 方法 是獨(dú)立:

//c語(yǔ)言的思想:數(shù)據(jù)  方法 分開(kāi)
//人
typedef struct
{
    char name[32];
    int age;
}Person;
//動(dòng)物
typedef struct
{
    char name[32];
    int age;
    int type;
}Dog;
void PersonEat(Person *p)
{
    cout<<p->name<<"正在吃飯"<<endl;
}
void DogEat(Dog *d)
{
    cout<<d->name<<"正在吃狗糧, 汪汪"<<endl;
}
void test01()
{
    Person person = {"老王",43};
    Dog dog={"旺財(cái)",6};
    PersonEat(&person);
    DogEat(&dog);
    // 出現(xiàn)一個(gè)問(wèn)題(數(shù)據(jù) 方法獨(dú)立  容易造成 方法 調(diào)用錯(cuò)誤數(shù)據(jù))
    DogEat((Dog *)&person);
}

類(lèi)的初識(shí)

1、封裝

把變量(屬性)和函數(shù)(操作)合成一個(gè)整體,封裝在一個(gè)類(lèi)中

對(duì)變量和函數(shù)進(jìn)行訪(fǎng)問(wèn)控制(公有、私有、保護(hù))

類(lèi)的封裝:將數(shù)據(jù)和方法封裝在一起 加以權(quán)限區(qū)分 用戶(hù)只能通過(guò)公共方法 訪(fǎng)問(wèn)私有數(shù)據(jù)。

2、權(quán)限

private私有 public公有 protected保護(hù)

private私有:類(lèi)外部不可直接訪(fǎng)問(wèn)私有數(shù)據(jù) 類(lèi)內(nèi)部可以訪(fǎng)問(wèn)

protected保護(hù):類(lèi)外部不可直接訪(fǎng)問(wèn)私有數(shù)據(jù) 類(lèi)內(nèi)部可以訪(fǎng)問(wèn)

public公有:類(lèi)外部可以訪(fǎng)問(wèn)私有數(shù)據(jù) 類(lèi)內(nèi)部可以訪(fǎng)問(wèn)

權(quán)限只是針對(duì) 類(lèi)的外部 , 類(lèi)的內(nèi)部 沒(méi)有權(quán)限之分

class 類(lèi)名{//抽象的概念  系統(tǒng)不會(huì)為其分配空間
    private://私有 類(lèi)的外部 不可直接訪(fǎng)問(wèn)
    protected://保護(hù) 類(lèi)的外部 不可直接訪(fǎng)問(wèn)
    數(shù)據(jù)
    public://公有 類(lèi)的外部 可以直接訪(fǎng)問(wèn)
    方法
    //在類(lèi)的內(nèi)部 沒(méi)有權(quán)限之分  都可以相互訪(fǎng)問(wèn)
};

案例:

class Person//抽象的概念
{//類(lèi)的內(nèi)部
private:
    int m_money;//私有數(shù)據(jù)
protected:
    int m_age;
public:
    void dese()
    {
        m_money = 100;
        m_age = 18;
        cout<<"我有房 有車(chē) 又年輕"<<m_age<<"歲又有錢(qián)"<<m_money<<"萬(wàn)美金 我就愛(ài)嘚瑟"<<endl;
    }
};
void test01()
{
    //用類(lèi) 去 實(shí)例化 一個(gè)對(duì)象(就是用Person定義一個(gè)變量)
    Person lucy;
    //cout<<"兄弟你的錢(qián):"<<lucy.m_money<<endl;//err 內(nèi)的外部不可訪(fǎng)問(wèn)
    //cout<<"兄弟你的年齡:"<<lucy.m_age<<endl;//err 內(nèi)的外部不可訪(fǎng)問(wèn)
    lucy.dese();//ok 公有的類(lèi)的外部可用訪(fǎng)問(wèn)
    //private protected雖然是私有、保護(hù)的 類(lèi)外不可訪(fǎng)問(wèn) 但是用戶(hù)可以借助 public公有的方法
    //間接的訪(fǎng)問(wèn)私有、保護(hù)的數(shù)據(jù)
}

class默認(rèn)是私有的 數(shù)據(jù)私有 方法公有 用戶(hù)就可以借助 公有方法 間接的操作 私有數(shù)據(jù)

3、類(lèi)的定義(定義類(lèi)型)

關(guān)鍵字 class

#include <iostream>
using namespace std;
//類(lèi)的定義:是不占空間  只有用類(lèi)實(shí)例化 對(duì)象的時(shí)候 系統(tǒng)為對(duì)象開(kāi)辟空間
class Data
{
private://私有
//    int a=10;//err 定義類(lèi)的時(shí)候 盡量不要 給成員賦值
    int a;//成員 數(shù)據(jù)
protected://保護(hù)
    int b;
public://公有
    int c;
    //成員函數(shù)
    void data_show(void)
    {
        //類(lèi)的內(nèi)部:沒(méi)有權(quán)限區(qū)分 
        cout<<a<<", "<<b<<", "<<c<<endl;
    }
};
//類(lèi)中的數(shù)據(jù)成員 擁有 獨(dú)立的空間
void test01()
{
    //使用Data實(shí)例化一個(gè)對(duì)象名為ob的對(duì)象
    Data ob;
    //成員數(shù)據(jù)依賴(lài)于對(duì)象的
    //cout<<" ob.a = "<<ob.a<<endl;//err a為私有 類(lèi)外不能直接訪(fǎng)問(wèn)
    //cout<<" ob.b = "<<ob.b<<endl;//err b為保護(hù) 類(lèi)外不能直接訪(fǎng)問(wèn)
    cout<<" ob.c = "<<ob.c<<endl;//err c為公有 類(lèi)外可以直接訪(fǎng)問(wèn)
    //對(duì)象 通過(guò)公共方法 間接調(diào)用私用數(shù)據(jù)
    ob.data_show();
}
int main(int argc, char *argv[])
{
    test01();
    return 0;
}

4、類(lèi)的成員函數(shù)與類(lèi)中聲明及類(lèi)外定義

class Data2
{
    //默認(rèn)為私有
    int a;
public:
    //類(lèi)中聲明 類(lèi)外定義
    void setA(int v);
    int getA(void);
};
void Data2::setA(int v)
{
    a = v;
    return;
}
int Data2::getA()
{
    return a;
}
void test02()
{
    Data2 ob;
    ob.setA(100);
    cout<<"a = "<<ob.getA()<<endl;
}

Person類(lèi)的設(shè)計(jì)

設(shè)計(jì)一個(gè)Person類(lèi)型

設(shè)計(jì)一個(gè)Person類(lèi),Person類(lèi)具有name和age屬性,提供初始化函數(shù)(Init),并提供對(duì)name和age的 讀寫(xiě)函數(shù)(set,get),但必須確保age的賦值在有效范圍內(nèi)(0-100),超出有效范圍,則拒絕賦值,并提供 方法輸出姓名和年齡。

person.h:

#ifndef PERSON_H
#define PERSON_H
//類(lèi)的頭文件:一般定義成員數(shù)據(jù) 聲明成員函數(shù)
class Person
{
private:
    char m_name[32];
    int m_age;
public:
    //初始化m_name m_age
    void init(char *name, int age);
    //設(shè)置name
    void setName(char *name);
    //獲取name
    char *getName(void);
    //設(shè)置age
    void setAge(int age);
    //獲取age
    int getAge(void);
    //顯示m_name m_age
    void showPerons(void);
};
#endif // PERSON_H

person.cpp:

#include "person.h"
//#include <string.h>
#include<cstring>
#include<iostream>
using namespace std;
//定義類(lèi)的成員函數(shù)
void Person::init(char *name, int age)
{
    strcpy(m_name, name);
    if(age>=0 && age<=100)
    {
        m_age = age;
    }
    else
    {
        cout<<"年齡輸入非法"<<endl;
    }
}
void Person::setName(char *name)
{
    strcpy(m_name, name);
    return;
}
char *Person::getName()
{
    return m_name;
}
void Person::setAge(int age)
{
    if(age>=0 && age<=100)
    {
        m_age = age;
    }
    else
    {
        cout<<"年齡輸入非法"<<endl;
    }
    return;
}
int Person::getAge()
{
    return m_age;
}
void Person::showPerons()
{
    cout<<"姓名:"<<m_name<<", 年齡:"<<m_age<<endl;
    return;
}

main.cpp

#include <iostream>
#include "person.h"
using namespace std;
int main(int argc, char *argv[])
{
    Person ob;
    ob.init("lucy", 18);
    ob.showPerons();
    ob.setName("bob");
    cout<<"姓名:"<<ob.getName()<<endl;
    ob.setAge(19);
    cout<<"年齡:"<<ob.getAge()<<endl;
    return 0;
}

設(shè)計(jì)立方體類(lèi)

設(shè)計(jì)立方體類(lèi)(Cube),求出立方體的面積( 2ab + 2ac + 2bc )和體積( a * b * c),分別用全局函數(shù)和成員 函數(shù)判斷兩個(gè)立方體是否相等

cube.h

#ifndef CUBE_H
#define CUBE_H
class Cube
{
private:
    int m_l;
    int m_w;
    int m_h;
public:
    void setL(int l);
    int getL(void);
    void setW(int w);
    int getW(void);
    void setH(int h);
    int getH(void);
    int getS(void);
    int getV(void);
    bool compareCube(Cube &ob);
};
#endif // CUBE_H

cube.cpp

#include "cube.h"
void Cube::setL(int l)
{
    m_l = l;
    return;
}
int Cube::getL()
{
    return m_l;
}
void Cube::setW(int w)
{
    m_w = w;
    return;
}
int Cube::getW()
{
    return m_w;
}
void Cube::setH(int h)
{
    m_h = h;
    return;
}
int Cube::getH()
{
    return m_h;
}
int Cube::getS()
{
    return (m_l*m_w+m_w*m_h+m_l*m_h)*2;
}
int Cube::getV()
{
    return m_l*m_w*m_h;
}
bool Cube::compareCube(Cube &ob)
{
    if((m_l==ob.m_l) &&( m_w==ob.m_w) &&(m_h == ob.m_h))
        return true;
    else
        return false;
}

main.cpp

#include <iostream>
#include "cube.h"
using namespace std;
bool myCompareCube(Cube &ob1, Cube &ob2)
{
    if((ob1.getL() == ob2.getL()) && \
            (ob1.getW() == ob2.getW()) &&(ob1.getH() == ob2.getH()))
    {
        return true;
    }
    else
        return false;
}
int main(int argc, char *argv[])
{
    Cube ob1;
    ob1.setL(10);
    ob1.setW(10);
    ob1.setH(10);
    cout<<"面積為:"<<ob1.getS()<<endl;
    cout<<"體積為:"<<ob1.getV()<<endl;
    Cube ob2;
    ob2.setL(10);
    ob2.setW(20);
    ob2.setH(10);
    if(ob1.compareCube(ob2) == true)
    {
        cout<<"相等"<<endl;
    }
    else
    {
        cout<<"不相等"<<endl;
    }
    if(myCompareCube(ob1, ob2) == true)
    {
        cout<<"相等"<<endl;
    }
    else
    {
        cout<<"不相等"<<endl;
    }
    return 0;
}

點(diǎn)Point和圓Circle的關(guān)系

#include <iostream>
using namespace std;
class Point
{
private:
    int m_x;
    int m_y;
public:
    void setX(int x)
    {
        m_x = x;
    }
    int getX(void)
    {
        return m_x;
    }
    void setY(int y)
    {
        m_y = y;
    }
    int getY(void)
    {
        return m_y;
    }
};
class Circle
{
private:
    Point m_p;
    int m_r;
public:
    void setPoint(int x, int y)
    {
        m_p.setX(x);
        m_p.setY(y);
    }
    void setR(int r)
    {
        m_r = r;
    }
    int getR(void)
    {
        return m_r;
    }
    int PointIsOnCircle(Point &p)
    {
        int tmp_x = (m_p.getX()-p.getX())*(m_p.getX()-p.getX());
        int tmp_y = (m_p.getY()-p.getY())*(m_p.getY()-p.getY());
        if((tmp_x+tmp_y) > (m_r*m_r))//圓外
        {
            return 1;
        }
        else if((tmp_x+tmp_y) == (m_r*m_r))//圓上
        {
            return 0;
        }
        else if((tmp_x+tmp_y) < (m_r*m_r))//圓內(nèi)
        {
            return -1;
        }
    }
};
int main(int argc, char *argv[])
{
    Point p1;
    p1.setX(5);
    p1.setY(5);
    Circle c1;
    c1.setPoint(2,2);
    c1.setR(5);
    int ret = c1.PointIsOnCircle(p1);
    if( ret== 0)
    {
        cout<<"圓上"<<endl;
    }
    else if(ret == 1)
    {
        cout<<"圓外"<<endl;
    }
    else if(ret == -1)
    {
        cout<<"圓內(nèi)"<<endl;
    }
    return 0;
}

到此這篇關(guān)于C++深入分析講解類(lèi)的知識(shí)點(diǎn)的文章就介紹到這了,更多相關(guān)C++類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)開(kāi)發(fā)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值

    Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值

    這篇文章主要為大家介紹了Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定板

    OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定板

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • c++引用傳參和指針傳參的區(qū)別及說(shuō)明

    c++引用傳參和指針傳參的區(qū)別及說(shuō)明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 利用C語(yǔ)言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的飛機(jī)游戲

    利用C語(yǔ)言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的飛機(jī)游戲

    在前面彈跳小球?的基礎(chǔ)上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的飛機(jī)游戲,主要包括飛機(jī)的顯示、控制移動(dòng)、顯示復(fù)雜圖案、發(fā)射激光、打靶練習(xí)等功能,感興趣的可以嘗試一下
    2022-10-10
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)程序設(shè)計(jì)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)程序設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)程序設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++抽象數(shù)據(jù)類(lèi)型介紹

    C++抽象數(shù)據(jù)類(lèi)型介紹

    這篇文章主要介紹了C++抽象數(shù)據(jù)類(lèi)型,我們?cè)趯W(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,經(jīng)常遇到的一個(gè)概念就是抽象數(shù)據(jù)類(lèi)型(Abstract Data Type),簡(jiǎn)稱(chēng)ADT。下面我們就對(duì)ADT作更多介紹,需要的朋友可以參考一下
    2022-01-01
  • c++ 函數(shù)指針相關(guān)總結(jié)

    c++ 函數(shù)指針相關(guān)總結(jié)

    這篇文章主要介紹了c++ 函數(shù)指針的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • 如何運(yùn)用Capstone實(shí)現(xiàn)64位進(jìn)程鉤子掃描

    如何運(yùn)用Capstone實(shí)現(xiàn)64位進(jìn)程鉤子掃描

    本章將通過(guò)Capstone引擎實(shí)現(xiàn)64位進(jìn)程鉤子的掃描,讀者可使用此段代碼檢測(cè)目標(biāo)進(jìn)程內(nèi)是否被掛了鉤子,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Qt利用DOM類(lèi)實(shí)現(xiàn)讀取xml文件

    Qt利用DOM類(lèi)實(shí)現(xiàn)讀取xml文件

    Dom(Document Object Model,即文檔對(duì)象模型)能把XML文檔轉(zhuǎn)換成應(yīng)用程序可遍歷的樹(shù)形結(jié)構(gòu),這樣便可以隨機(jī)訪(fǎng)問(wèn)其中的節(jié)點(diǎn)。本文將詳細(xì)講講實(shí)現(xiàn)的方法,需要的可以參考一下
    2022-06-06

最新評(píng)論

璧山县| 陆河县| 丰宁| 登封市| 甘谷县| 宁化县| 克东县| 铁岭县| 博兴县| 稷山县| 镇安县| 大竹县| 新龙县| 闵行区| 班玛县| 泾阳县| 中方县| 堆龙德庆县| 错那县| 定远县| 博爱县| 大渡口区| 广平县| 永定县| 象州县| 仁布县| 荥阳市| 友谊县| 阿克陶县| 平陆县| 三穗县| 綦江县| 敖汉旗| 历史| 双牌县| 图们市| 莲花县| 长兴县| 科技| 友谊县| 南澳县|