1.?類的概述
1.1?具體示例
類是描述一類事物的特征和行為的統稱,抽象的不存在的,泛指的概念,例如:描述一個人,從外觀上(特征)和言行舉止(行為)上進行描述外觀上(特征):長頭發藍牙眼睛白皮膚帶了美瞳年齡多大身高體重.....言行舉止(行為):走路跑步說話學習打游戲.......
1.2?對象
是指類的實例化(實實在在存在的),是特指的概念,例如:人類實例化對象張三、李四、王二等等
1.3?程序來描述
關鍵字:class -------描述一個類
格式:class 類名{//外觀---特征長頭發藍牙眼睛白皮膚帶了美瞳年齡多大身高體重.....//言行舉止----行為走路跑步說話學習打游戲.......};例如:class People{//特征int eyes;int age;int height;int weight;char name[20];.....//行為void walk(){}void run(){}void play(){}void study(){}..........};
特征(屬性):
指的是變量,稱為類的成員變量
行為(方法):
指的是函數,稱為類的成員函數
類的成員:
包含了成員變量和成員函數
1.4?創建類
1.4.1?第一種方式,直接在主程序文件中創建類
main.c
#include "iostream"
using namespace std;//第一種方式,直接在主程序文件中創建類
class People1
{int age;//年齡int height;//身高char name[20];//姓名//函數的實現第一種方式:在類中實現函數void walk()//走路的行為{cout << "走路" << endl;}void play()//玩的行為{cout << "玩耍" << endl;}void study();//學習
};
//函數的實現第二種方式:在類外實現函數
/*
格式:函數返回值類型 類名 ::函數名(參數列表){//代碼}
*/void People1::study()
{cout << "學習" << endl;
}int main()
{return 0;
}
1.4.2?分模塊創建
People2.h
#pragma once
#include "iostream"
using namespace std;class People2
{int age;int height;char name[20];void walk(){cout << "走路" << endl;}void study(){cout << "學習" << endl;}//這個函數的實現我們換一種方式實現,我們放在people2.cpp中實現void play_game();};
People2.cpp
#include "People2.h"
/*
格式:函數返回值類型 類名 ::函數名(參數列表){//代碼}
*/
void People2::play_game()
{cout << "玩游戲" << endl;
}
2.?實例化的兩種方式
是指類的實例化(實實在在存在的),是特指的概念,例如:人類實例化對象張三、李四、王二等等
實例化的兩種方式:
2.1?在棧區進行實例化
格式:
類名對象名;?//類名和對象名就是標識符,?滿足語法規范
例如:
People?zhangsan?;?//實例化zhangsan對象
People?lisi;??????????
2.1.1?通過類的對象去進行訪問
(1)對象是在棧區實例化
符號:“.”
格式:
對象名??.????成員?;??//訪問類的成員
例如:
zhangsan.height=180;
zhangsan.walk();
main.cpp
#include "iostream"
using namespace std;//類和對象實例化//第一種方式,直接在主程序文件中創建類
class People1
{
public:int age;//年齡int height;//身高char name[20];//姓名//函數的實現第一種方式:在類中實現函數void walk()//走路的行為{cout << "走路" << endl;}void play()//玩的行為{cout << "玩耍" << endl;}void study();//學習
};
//函數的實現第二種方式:在類外實現函數
/*
格式:函數返回值類型 類名 ::函數名(參數列表){//代碼}
*/void People1::study()
{cout << "學習" << endl;
}int main()
{//第一種 實例化一個People1People1 people1;people1.walk();people1.play();people1.study();cout << endl;//第二種 實例化一個People1People1* people2 = new People1;people2->walk();people2->play();people2->study();return 0;
}
2.2?在堆區進行實例化
格式:?.
類名? *? 對象名? =? ?new? 類名;?//在堆區開辟類大小的空間,并用對象指向該空間
People*?zhangsan?=?new?People????//注意釋放空間:delete?zhangsan
2.2.1?如何訪問類的成員
(2)對象是在堆區實例化
符號:“->”
格式:
對象名?->??成員?;//訪問類的成員
例如:
zhangsan->height=180;
zhangsan->walk();
main.cpp
//第二種 實例化一個People1People1* people2 = new People1;people2->walk();people2->play();people2->study();
#include <iostream>
using namespace std;class MyClass {
public:MyClass() {// 無參構造函數的實現}void setValue(int value) {data = value;}void display() {cout << "Value: " << data << endl;}int data;
};int main() {// 在堆上創建對象MyClass* ptr = new MyClass();// 為成員變量賦值ptr->setValue(42);ptr->display();ptr->data = 50;ptr->display();// 釋放對象所占用的內存delete ptr;return 0;
}
2.3?面試題:結構體和類的區別是什么?
僅供參考
1.?默認訪問權限:
在結構體中,默認的成員訪問權限是公共的(public)。
在類中,默認的成員訪問權限是私有的(private)。
2.?成員函數:
在結構體中,你可以包含成員函數,但這些函數默認是公共的。
在類中,你可以有公共、私有和受保護的成員函數,具體取決于你在類定義中的聲明。
3.?繼承:
在結構體中,可以進行繼承,但默認繼承權限是公共的。
在類中,可以進行公共、私有和受保護的繼承,具體取決于你在類定義中的聲明。
4.?默認構造函數:
在結構體中,如果沒有提供構造函數,會有一個默認的構造函數。
在類中,如果沒有提供構造函數,也會有一個默認的構造函數,但是如果你提供了自定義構造函數,那么默認構造函數就不再提供。