05- 類和物件
阿新 • • 發佈:2020-12-29
技術標籤:C++
面向物件
將日常生活中習慣的思維方式引入程式設計中,將需求中的概念直觀的對映到解決方案中。
以模組為中心構建可複用的軟體系統,提高軟體產品的可維護性和可擴充套件性
C++類和物件
C++是一門面向物件的程式語言,理解 C++,首先要理解**類(Class)和物件(Object)**這兩個概念
生活中的類和物件
類
類:指的是一類事物,是一個抽象的概念。類是一種模型,這種模型可以創建出不同的物件實體。
物件
物件實體是類模型的一個具體例項,物件:指的是屬於某個類的具體實體。
C++ 中的類(Class)可以看做C語言中結構體(Struct)的升級。結構體是一種構造型別,可以包含若干成員變數,每個成員變數的型別可以不同,可以通過結構體來定義結構體變數,每個變數擁有相同的性質。
程式碼示例
#include <stdio.h>
//定義結構體 Student
struct Student{
//結構體包含的成員變數
char *name;
int age;
int score;
};
// 宣告函式
void show(struct Student *);
int main(){
struct Student stu;
//為成員變數賦值
stu.name = "curry";
stu.age = 10;
stu.score = 98;
//呼叫函式
show(& stu);
return 0;
}
//結構體的成員變數
void show(struct Student *pst){
printf("%s的年齡是 %d\n,成績是 %d\n", pst->name, pst->age, pst->score);
}
程式碼執行結果
curry的年齡是10,成績是98
C++ 中的類也是一種構造型別,但是進行了一些擴充套件,類的成員不但可以是變數,還可以是函式。通過類定義出來的變數叫做“物件”。
程式碼示例
#include <iostream>
/**
* 類和物件
*/
using namespace std;
//通過class關鍵字定義學生類
class Student{
public:
// 定義變數
char *name;
int age;
float score;
// 宣告函式
void say(){
// 輸出結果
cout << name << "的年齡是:" << age <<", 成績是:" << score << endl;
}
};
int main() {
//建立物件
Student stu;
//為類的成員變數賦值
stu.name = "curry";
stu.age = 10;
stu.score = 92.5f;
//呼叫函式
stu.say();
return 0;
}
類之間的基本關係
類的封裝
- 把變數(屬性)和函式(操作)合成一個整體,封裝在一個類中。
- 對變數和函式進行訪問控制。
訪問許可權
- 在類的內部(作用域範圍內),沒有訪問許可權之分,所有成員可以相互訪問。
- 在類的外部(作用域範圍外),訪問許可權才有意義:public,private,protected。
- 在類的外部,只有public修飾的成員才能被訪問,在沒有涉及繼承與派生時, private和protected是同等級的,外部不允許訪問。
訪問屬性 | 屬性 | 物件內部 | 物件外部 |
---|---|---|---|
public | 公有 | 可訪問 | 可訪問 |
protected | 保護 | 可訪問 | 不可訪問 |
private | 私有 | 可訪問 | 不可訪問 |
程式碼示例
#include <iostream>
/**
* 類的封裝
*/
using namespace std;
// 建立類Person
class Person{
public: // 公共許可權
string name; // 姓名
protected: // 保護許可權
string car;
private: // 私有許可權
int password;
public:
void function(){
/**
* 所有許可權類內都可以訪問
*/
name = "curry";
car = "小學生跑車";
password = 123446;
}
};
// 宣告函式
void test(){
// 建立物件
Person p;
p.name = 'kobe';
// p.car = "法拉第"; 保護許可權,在類外不可以訪問
// p.password = 134566; 私有許可權,在類外不可以訪問
}
int main() {
cout << "Hello, World!" << endl;
// 呼叫函式
test();
return 0;
}
成員屬性設定
使用成員函式可使得我們對變數的控制處理更加精細。
程式碼示例
#include <iostream>
/**
* 將成員屬性設定成私有屬性
*/
using namespace std;
// 建立Person類
class Person{
public:
// 設定姓名
void setName(string name){
myName = name;
}
// 獲取姓名
string getName(){
return myName;
}
// 設定年齡
void setAge(int age){
// 檢測年齡
if(age < 0 || age > 30){
cout << "不好意思,你不是學生了" << endl;
return;
}
myAge = age;
}
// 獲取年齡
int getAge()
{
return myAge;
}
private:
string myName; // 姓名
int myAge = 18;
};
// 宣告函式
void test(){
// 建立物件
Person p1;
// 對於姓名,可以設定也可以獲取
p1.setName("curry");
cout << "p1的姓名是:" << p1.getName() << endl;
// 年齡的是隻讀狀態,不可以設定
p1.setAge(55);
cout << "p1的年齡為:" << p1.getAge() <<endl;
}
int main() {
// 呼叫函式
test();
return 0;
}
程式執行結果