C++基础学习笔记 day03
生活随笔
收集整理的這篇文章主要介紹了
C++基础学习笔记 day03
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.?設計立方體類
設計立方體類(Cube),求立方體的面積(2*a*b + 2*a*c + 2*b*c)和體積(a*b*c),分別用全局函數和成員函數判斷兩個立方體是否相等?
#include <iostream> using namespace std;/* 設計立方體類(Cube) 求立方體的面積(2*a*b + 2*a*c + 2*b*c)和體積(a*b*c) 分別用全局函數和成員函數判斷兩個立方體是否相等? */class Cube { public:// 設置長寬高void setL(int l){m_L = l;}void setW(int w){m_W = w;}void setH(int h){m_H = h;}// 獲取長寬高int getL(){return m_L;int getW(){return m_W;}int getH(){return m_H;}// 求立方體的面積void getCubeS(){int S = 2*m_L*m_W + 2*m_L*m_H + 2*m_W*m_H;cout << "立方體的面積為:" << S << endl;}// 求立方體的體積void getCubeV(){int V = m_L*m_W*m_H;cout << "立方體的體積為:" << V << endl;}// 通過成員函數判斷是否相等bool compareCubeByClass( Cube &cub ){bool ret = ( cub.getL() == m_L && cub.getW() == m_W && cub.getH() == m_H );return ret;}private:int m_L; // 長int m_W; // 寬int m_H; // 高 };// 全局函數判斷 兩個立方體是否相等 bool compareCube( Cube &cub1, Cube &cub2 ) {if( cub1.getL() == cub2.getL() && cub1.getW() == cub2.getW() && cub1.getH() == cub2.getH() ){return true;}return false; }void test01() {Cube c1;c1.setL(10);c1.setW(10);c1.setH(10);c1.getCubeS(); // 600c1.getCubeV(); // 1000// 通過全局函數判斷兩個立方體是否相等Cube c2;c2.setL(10);c2.setW(10);c2.setH(10);bool ret = compareCube( c1, c2 );if( ret == true ){cout << "c1和c2兩個立方體相等" << endl;}else{cout << "c1和c2兩個立方體不相等" << endl;}// 通過成員函數判斷兩個立方體是否相等bool ret2 = c1.compareCubeByClass( c2 );if( ret2 == true ){cout << "通過成員函數:c1和c2兩個立方體相等" << endl;}else{cout << "通過成員函數:c1和c2兩個立方體不相等" << endl;} }int main() {test01();return 0; }?
2.?對象的構造和析構?
對象的初始化和清理:
系統會默認調用?構造函數和析構函數,而且只會調用一次。
如果程序員沒有提供構造和析構,系統會默認提供,空實現。
?構造函數的分類:
- 按照參數進行分類:無參構造函數(默認構造函數)、有參構造函數
- 按照類型進行分類:普通構造函數、拷貝構造函數
?
3.?初始化列表
include <iostream> using namespace std;class Person { public:// 有參構造函數 初始化數據/*Person( int a, int b, int c ){m_A = a;m_B = b;m_C = c;}*/// 利用初始化列表 初始化數據// 構造函數后面 :屬性(參數),屬性(參數)...Person(int a, int b, int c):m_A(a),m_B(b),m_C(c){}int m_A;int m_B;int m_C; };void test01() {Person p1(10,20,30);cout << "p1的m_A:" << p1.m_A << endl;cout << "p1的m_B:" << p1.m_B << endl;cout << "p1的m_C:" << p1.m_C << endl; }int main() {test01();return 0; }初始化列表語法:
在構造函數后面 :屬性(值/參數),屬性(值/參數)...
?
4.?類對象作為成員
#include <iostream> using namespace std;class Phone { public:Phone(){cout << "手機的默認構造函數調用" << endl;}Phone(string name){m_PhoneName = name;}~Phone(){cout << "手機的析構函數調用" << endl;}string m_PhoneName; };class Game { public:Game(){cout << "Game的默認構造函數調用" << endl;}Game(string name){m_GameName = name;}~Game(){cout << "Game的析構函數調用" << endl;}string m_GameName; };class Person { public:Person(){cout << "Person的默認構造函數調用" << endl;}~Person(){cout << "Person的析構函數調用" << endl;}Person(string name){m_Name = name;}string m_Name; // 姓名Phone m_Phone; // 手機Game m_Game; // 游戲 };void test01() {Person p;p.m_Phone.m_PhoneName = "三星";p.m_Game.m_GameName = "斗地主"; }int main() {test01();return 0; }類對象作為類成員時候,構造順序先將對象一一構造,然后再構造自己,析構函數順序相反。
#include <iostream> using namespace std;class Phone { public:Phone(){cout << "手機的默認構造函數調用" << endl;}Phone(string name){cout << "手機的有參構造函數調用" << endl;m_PhoneName = name;}~Phone(){cout << "手機的析構函數調用" << endl;}string m_PhoneName; };class Game { public:Game(){cout << "Game的默認構造函數調用" << endl;}Game(string name){cout << "Game的有參構造函數調用" << endl;m_GameName = name;}~Game(){cout << "Game的析構函數調用" << endl;}string m_GameName; };class Person { public:Person(){cout << "Person的默認構造函數調用" << endl;}~Person(){cout << "Person的析構函數調用" << endl;}Person(string name, string phoneName, string gameName) : m_Name(name), m_Phone(phoneName), m_Game(gameName){cout << "Person的有參構造函數調用" << endl;//m_Name = name;}void playGame(){cout << m_Name << "玩" << m_Phone.m_PhoneName << "牌的" << m_Game.m_GameName << "游戲" << endl;}string m_Name; // 姓名Phone m_Phone; // 手機Game m_Game; // 游戲 };void test01() {Person p("狗蛋","蘋果","王者榮耀");//p.m_Phone.m_PhoneName = "三星";//p.m_Game.m_GameName = "斗地主";p.playGame(); }int main() {test01();return 0; }?當類對象作為類的成員時候,構造順序是先構造類對象的構造,然后構造自己
析構順序與構造相反
?
4.?對象創建
C語言中malloc:
4.1?new?運算符
C++解決動態內存分配的方案是把創建一個對象所需的操作都結合在一個稱為new運算符里。
當用new創建一個對象時,它就在堆里為對象分配內存并調用構造函數完成初始化。
Person *?person =?new?Person;相當于:
Person *person = (Person *)malloc(sizeof(Person)); if( person == NULL ) {return 0; } person->Init(); // 構造函數?
new?運算符和?delete?運算符:
總結
以上是生活随笔為你收集整理的C++基础学习笔记 day03的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据与深度学习
- 下一篇: 2021最全大数据学习路线(建议收藏)