<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
C語言中 資料 和 方法 是獨立:
//c語言的思想:資料 方法 分開 //人 typedef struct { char name[32]; int age; }Person; //動物 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={"旺財",6}; PersonEat(&person); DogEat(&dog); // 出現一個問題(資料 方法獨立 容易造成 方法 呼叫錯誤資料) DogEat((Dog *)&person); }
把變數(屬性)和函數(操作)合成一個整體,封裝在一個類中
對變數和函數進行存取控制(公有、私有、保護)
類的封裝:將資料和方法封裝在一起 加以許可權區分 使用者只能通過公共方法 存取私有資料。
private私有 public公有 protected保護
private私有:類外部不可直接存取私有資料 類內部可以存取
protected保護:類外部不可直接存取私有資料 類內部可以存取
public公有:類外部可以存取私有資料 類內部可以存取
許可權只是針對 類的外部 , 類的內部 沒有許可權之分
class 類名{//抽象的概念 系統不會為其分配空間
private://私有 類的外部 不可直接存取
protected://保護 類的外部 不可直接存取
資料
public://公有 類的外部 可以直接存取
方法
//在類的內部 沒有許可權之分 都可以相互存取
};
案例:
class Person//抽象的概念 {//類的內部 private: int m_money;//私有資料 protected: int m_age; public: void dese() { m_money = 100; m_age = 18; cout<<"我有房 有車 又年輕"<<m_age<<"歲又有錢"<<m_money<<"萬美金 我就愛嘚瑟"<<endl; } }; void test01() { //用類 去 範例化 一個物件(就是用Person定義一個變數) Person lucy; //cout<<"兄弟你的錢:"<<lucy.m_money<<endl;//err 內的外部不可存取 //cout<<"兄弟你的年齡:"<<lucy.m_age<<endl;//err 內的外部不可存取 lucy.dese();//ok 公有的類的外部可用存取 //private protected雖然是私有、保護的 類外不可存取 但是使用者可以藉助 public公有的方法 //間接的存取私有、保護的資料 }
class預設是私有的 資料私有 方法公有 使用者就可以藉助 公有方法 間接的操作 私有資料
關鍵字 class
#include <iostream> using namespace std; //類的定義:是不佔空間 只有用類範例化 物件的時候 系統為物件開闢空間 class Data { private://私有 // int a=10;//err 定義類的時候 儘量不要 給成員賦值 int a;//成員 資料 protected://保護 int b; public://公有 int c; //成員函數 void data_show(void) { //類的內部:沒有許可權區分 cout<<a<<", "<<b<<", "<<c<<endl; } }; //類中的資料成員 擁有 獨立的空間 void test01() { //使用Data範例化一個物件名為ob的物件 Data ob; //成員資料依賴於物件的 //cout<<" ob.a = "<<ob.a<<endl;//err a為私有 類外不能直接存取 //cout<<" ob.b = "<<ob.b<<endl;//err b為保護 類外不能直接存取 cout<<" ob.c = "<<ob.c<<endl;//err c為公有 類外可以直接存取 //物件 通過公共方法 間接呼叫私用資料 ob.data_show(); } int main(int argc, char *argv[]) { test01(); return 0; }
class Data2 { //預設為私有 int a; public: //類中宣告 類外定義 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型別
設計一個Person類,Person類具有name和age屬性,提供初始化函數(Init),並提供對name和age的 讀寫函數(set,get),但必須確保age的賦值在有效範圍內(0-100),超出有效範圍,則拒絕賦值,並提供 方法輸出姓名和年齡。
person.h:
#ifndef PERSON_H #define PERSON_H //類的標頭檔案:一般定義成員資料 宣告成員函數 class Person { private: char m_name[32]; int m_age; public: //初始化m_name m_age void init(char *name, int age); //設定name void setName(char *name); //獲取name char *getName(void); //設定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; //定義類的成員函數 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; }
設計立方體類(Cube),求出立方體的面積( 2ab + 2ac + 2bc )和體積( a * b * c),分別用全域性函數和成員 函數判斷兩個立方體是否相等
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; }
#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))//圓內 { 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<<"圓內"<<endl; } return 0; }
到此這篇關於C++深入分析講解類的知識點的文章就介紹到這了,更多相關C++類別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45