前言
博主通過對C++基礎知識的總結,有望寫出深入淺出的C++基礎教程專欄,并分享給大家閱讀,今后的一段時間我將持續更新C++入門系列博文,想學習C++的朋友可以關注我,希望大家有所識訓,
C++面向物件的三大特性為:封裝、繼承、多型,
1 封裝
1.1 基本概述
類的語法:class 類名{ 訪問權限:屬性/行為 };
實體化: 通過一個類,創建一個物件的程序,
// 封裝案例
class student
{
public:
// 屬性
string m_Name; // 姓名
int m_ID; // 學號
// 行為
void showstudent()
{
cout << "姓名:" << m_Name << " 學號:" << m_ID << endl;
}
};
// 創建具體的學生,實體化物件
student s1;
// 給s1物件進行屬性賦值操作
s1.m_Name = "張三";
s1.m_ID = 1;
類中的屬性和行為統稱為成員,屬性:成員屬性或成員變數;行為:成員函式或成員方法,
封裝意義:1)在設計類的時候屬性和行為寫在一起,表現事物;2)在設計類的時候可以把屬性和行為放在不同的權限下,加以控制,
1.2 訪問權限
訪問權限有三種:
1)public 公共權限:成員類內可以訪問,類外也可以訪問;
2)protected 保護權限:成員類內可以訪問,類外不可以訪問;
3)private 私有權限:成員類內可以訪問,類外不可以訪問,
struct和class的區別:默認的訪問權限不同,struct 默認為公共權限;class 默認為私有權限,
2 物件特性
2.1 物件的初始化和清理
建構式:主要作用在于創建物件時為物件的成員屬性賦值,建構式由編譯器自動呼叫,
解構式:主要作用在于物件銷毀前系統自動呼叫,執行一些清理作業,
class Person
{
// 1、建構式:進行初始化操作
// 沒有回傳值,不用寫void
// 函式名與類名相同
// 可以有引數,可以發生多載
// 創建物件的時候會自動呼叫,且僅呼叫一次
public:
Person()
{
cout << "Person建構式的呼叫" << endl;
}
// 2.解構式:進行清理的操作
// 沒有回傳值,不用寫void
// 函式名與類名相同,在名稱前加~
// 不可以有引數,不可以發生多載
// 物件在銷毀前會自動呼叫,且僅呼叫一次
~Person()
{
cout << "Person解構式的呼叫" << endl;
}
};
// 創建一個物件p
Person p;
2.2 建構式的分類及呼叫
分類:按照引數分類(無參、有參);按照型別分類(普通構造、拷貝構造),
class Person
{
public:
Person()
{
cout << "Person默認(無參)建構式的呼叫" << endl;
}
Person(int age)
{
cout << "Person有參建構式的呼叫" << endl;
m_Age = age;
}
Person(const Person &p)
{
cout << "Person拷貝建構式的呼叫" << endl;
m_Age = p.m_Age;
}
~Person()
{
cout << "Person解構式的呼叫" << endl;
}
int m_Age;
};
呼叫:括號法、顯示法、隱式轉換法,
// 呼叫默認(無參)建構式
void test01()
{
Person p;
}
// 呼叫有參建構式
void test02()
{
// 括號法,常用
Person p1(10);
// 顯示法
Person p2 = Person(10);
Person p3 = Person(p2);
// 隱式轉換法
Person p4 = 10; // 等價于Person p4 = Person(10);
Person p5 = p4; // 等價于Person p5 = Person(p4);
}
2.3 拷貝建構式的呼叫時機
#include <iostream>
using namespace std;
class Person
{
public:
Person()
{
cout << "Person默認建構式的呼叫" << endl;
}
Person(int age)
{
cout << "Person有參建構式的呼叫" << endl;
m_Age = age;
}
Person(const Person &p)
{
cout << "Person拷貝建構式的呼叫" << endl;
m_Age = p.m_Age;
}
~Person()
{
cout << "Person解構式的呼叫" << endl;
}
int m_Age;
};
// 1)使用一個已經創建完畢的物件來初始化一個新物件
void test01()
{
Person p1(20);
Person p2(p1);
cout << "p2的年齡為:" << p2.m_Age << endl;
}
// 2)值傳遞的方式給函式引數傳值
void dowork1(Person p)
{
}
void test02()
{
Person p;
dowork1(p);
}
// 3)值方式回傳區域物件
Person dowork2()
{
Person p1;
return p1;
}
void test03()
{
Person p = dowork2();
}
int main()
{
test01();
test02();
test03();
system("pause");
return 0;
}
2.4 建構式呼叫規則
1)創建一個類,C++編譯器會給每個類都添加至少3個函式:默認建構式(空實作)、解構式(空實作)、拷貝函式(值拷貝);
2)如果寫了有參建構式,編譯器就不再提供默認建構式,但依然會提供拷貝建構式;
3)如果寫了拷貝建構式,編譯器就不再提供普通建構式,
未完待續,敬請期待下一篇博客:C++入門基礎教程(五):類和物件(中)
結束語
大家的點贊和關注是博主最大的動力,博主所有博文中的代碼檔案都可分享給您(除了少量付費資源),如果您想要獲取博文中的完整代碼檔案,可通過C幣或積分下載,沒有C幣或積分的朋友可在關注、點贊和評論博文后,私信發送您的郵箱,我會在第一時間發送給您,博主后面會有更多的分享,敬請關注哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287690.html
標籤:其他
