溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++核心編程類和對象詳解

發(fā)布時間:2021-09-03 16:20:16 來源:億速云 閱讀:107 作者:chen 欄目:開發(fā)技術

本篇內(nèi)容介紹了“C++核心編程類和對象詳解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

目錄
  • 1.封裝

    • 1.1封裝的意義

      • 封裝意義一:

      • 封裝意義二

    • 1.2 struct 和 class 區(qū)別

      • 1.3 成員屬性設置為私有


    C++面向?qū)ο笕筇匦裕?code>封裝、繼承、多態(tài)

    1.封裝

    1.1封裝的意義

    • 將屬性和行為作為一個整體

    • 將屬性和行為加以權限控制

    封裝意義一:

    語法:class 類名{ 訪問權限: 屬性 / 行為 };

    //實例1
    #define _CRT_SECURE_NO_WARNINGS 1
    //求圓的周長
    #include<iostream>
    using namespace std;
    #define pi 3.14
    class circle
    {
    public:
    	int m_d;//直徑
    	double calculate()
    	{
    		return pi*m_d;
    	}
    };
    int main()
    {
    	circle c1;
    	c1.m_d = 10;
    	cout << "圓周長為" << c1.calculate() << endl;
    	system("pause");
    	return 0;
    }
    //實例2
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    using namespace std;
    #include <string>
    class Student
    {
    public:
    	string m_name;
    	int m_num;
    	void showStudent()
    	{
    		cout << " 姓名:" << "\t" << m_name << " 學號:" << m_num << endl;
    	}
    	void setname(string name)
    	{
    		m_name = name;
    	}
    	void setnum(int num)
    	{
    		m_num = num;
    	}
    };
    int main()
    {
    	Student s1;
    	s1.setname("zhangsan");
    	s1.setnum(2001);
    	s1.showStudent();
    	Student s2;
    	s2.setname("lisi");
    	s2.setnum(2002);
    	s2.showStudent();
        system("pause");
    	return 0;
    }

    總結:類中的 屬性行為 統(tǒng)一稱為 成員

    類中的 屬性 又稱為 成員屬性 成員變量

    類中的 行為 又稱為 成員函數(shù) 成員方法

    封裝意義二

    訪問權限有三種

    公共權限: public 成員類內(nèi)可以訪問,類外可以訪問

    保護權限: protected 成員類內(nèi)可以訪問,類外不可以訪問 兒子可以訪問父親中的保護內(nèi)容

    私有權限: private 成員類內(nèi)可以訪問,類外不可以訪問 兒子不可以訪問父親中的保護內(nèi)容

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    using namespace std;
    #include <string>
    class Student
    {
    public:
    	string m_name;
    protected:
    	int m_num;
    private:
    	int m_age;
    public:
    	void func()
    	{
    		m_name = "lili";
    		m_num = 1;
    		m_age = 30;
    	}
    private:
    	void func1()
    	{
    		m_name = "lili";
    		m_num = 1;
    		m_age = 30;
    	}
    };
    int main()
    {
    	Student s1;
    	s1.m_name = "lilllll";
    	//s1.m_num = 2;//不可訪問
    	//s1.m_age = 20;//不可訪問
    	s1.func();
    	//s1.func1();//不可訪問
        system("pause");
    	return 0;
    }

    1.2 struct 和 class 區(qū)別

    在C++中 struct 和 class 區(qū)別在于 默認的訪問權限不同

    • struct 默認權限為公共

    • class 默認權限為私有

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    using namespace std;
    class C1
    {
    	string m_a;
    };
    struct C2
    {
    	string m_b;
    };
    int main()
    {
    	//C1 c1;
    	//c1.m_a = "lili";//不可訪問
    	C2 c2;
    	c2.m_b = "lili";
        system("pause");
    	return 0;
    }

    1.3 成員屬性設置為私有

    優(yōu)點:

    • 將所有成員屬性設置為私有,可以自己控制讀寫權限

    • 對于寫權限,我們可以檢測數(shù)據(jù)的有效性

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    #include <string>
    using namespace std;
    class C1
    {
    public:
    	void setname(string name)
    	{
    		m_name = name;
    	}
    	string getname()
    	{
    		return m_name;
    	}
    	int getnum()
    	{
    		return m_num;
    	}
    	void setage(int age)
    	{
    		m_age = age;
    	}
    private:
    	string m_name;
    	int m_num;
    	int m_age;
    };
    int main()
    {
    	C1 c;
    	c.setname("yangyang");//可寫
    	cout << c.getname() << endl;//可讀
    	cout << c.getnum() << endl;//只讀
    	c.setage(30);//只寫
        system("pause");
    	return 0;
    }

    好的,到這里封裝就算是學到手了,可以進行兩個小案例:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    #include <string>
    using namespace std;
    class Cube
    {
    public:
    	void setchang(int chang)
    	{
    		m_c = chang;
    	}
    	void setkuan(int kuan)
    	{
    		m_k = kuan;
    	}
    	void setgao(int gao)
    	{
    		m_g = gao;
    	}
    	int getchang()
    	{
    		return m_c;
    	}
    	int getkuan()
    	{
    		return m_k;
    	}
    	int getgao()
    	{
    		return m_g;
    	}
    	int S()
    	{
    		return 2 * (m_c*m_g + m_c*m_k + m_g*m_k);
    	}
    	int V()
    	{
    		return m_c*m_g*m_k;
    	}
    	bool isSamebyclass(Cube &c)
    	{
    		if (m_c == c.getchang() && m_g == c.getgao() && m_k == c.getkuan())
    		{
    			return true;
    		}
    		return false;
    	}
    private:
    	int m_c;
    	int m_k;
    	int m_g;
    };
    bool isSame1(Cube &c1, Cube &c2)
    {
    	if (c1.getchang() == c2.getchang() && c1.getgao() == c2.getgao() && c1.getkuan() == c2.getkuan())
    	{
    		return true;
    	}
    	return false;
    }
    int main()
    {
    	Cube c1;
    	c1.setchang(10);
    	c1.setkuan(10);
    	c1.setgao(10);
    	cout << "面積:" << c1.S() << endl;
    	cout << "體積:" << c1.V() << endl;
    	Cube c2;
    	c2.setchang(11);
    	c2.setkuan(11);
    	c2.setgao(11);
    	cout << "面積:" << c2.S() << endl;
    	cout << "體積:" << c2.V() << endl;
    	bool ret = isSame1(c1, c2);
    	if (ret)
    	{
    		cout << "全局函數(shù)判斷:兩個立方體相等" << endl;
    	}
    	else
    	{
            cout << "全局函數(shù)判斷:兩個立方體不相等" << endl;
    	}
    	ret = c1.isSamebyclass(c2);
    	if (ret)
    	{
    		cout << "成員函數(shù)判斷:兩個立方體相等" << endl;
    	}
    	else
    	{
    		cout << "成員函數(shù)判斷:兩個立方體不相等" << endl;
    	}
    	system("pause");
    	return 0;
    }
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<iostream>
    #include <string>
    using namespace std;
    class Point
    {
    public:
    	void setX(int x)
    	{
    		m_x = x;
    	}
    	int getX()
    	{
    		return m_x;
    	}
    	void setY(int y)
    	{
    		m_y = y;
    	}
    	int getY()
    	{
    		return m_y;
    	}
    private:
    	int m_x;
    	int m_y;
    };
    class Circle
    {
    public:
    	void setR(int r)
    	{
    		m_r = r;
    	}
    	int getR()
    	{
    		return m_r;
    	}
    	void setcenter(Point center)
    	{
    		m_center = center;
    	}
    	Point getcenter()
    	{
    		return m_center;
    	}
    private:
    	int m_r;
    	Point m_center;
    };
    void C_and_P(Circle &c, Point &p)
    {
    	int distance = (c.getcenter().getX() - p.getX())*(c.getcenter().getX() - p.getX()) + (c.getcenter().getY() - p.getY())* (c.getcenter().getY() - p.getY());
    	int doubleR = c.getR()*c.getR();
    	if (distance==doubleR)
    	{
    		cout << "點在圓上" << endl;
    	}
    	else if (distance<doubleR)
    	{
    		cout << "點在圓內(nèi)" << endl;
    	}
    	else
    	{
    		cout << "點在圓外" << endl;
    	}
    }
    int main()
    {
    	Point p;
    	p.setX(10);
    	p.setY(30);
    	Circle c;
    	c.setR(10);
    	Point center;
    	center.setX(26);
    	center.setY(43);
    	C_and_P(c, p);
        system("pause");
    	return 0;
    }

    “C++核心編程類和對象詳解”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    c++
    AI