日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++基础day03

發布時間:2023/12/31 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++基础day03 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c++基礎練習

  • 構造和析構的基礎知識
  • 構造和析構的演示
    • 構造函數的分類
    • 構造和析構的綜合練習
    • 構造函數調用規則研究
  • copy構造函數的調用時機
    • copy構造函數
    • 拷貝構造函數的第四種應用場景
  • 構造函數的調用規則
  • 淺拷貝和深拷貝分析
  • 構造函數的初始化列表
  • new 和 delete 的用法
    • 基本語法
    • 深入分析
  • 靜態成員變量和靜態成員函數
  • this 指針

構造和析構的基礎知識

對象的構造和析構
1.創建一個對象需要做初始化工作
構造函數
1)c++中的類可以定義和類同名的特殊成員函數,這種于類名相同的成員函數叫做析構函數
2)構造函數在定義時可以有參數
2)沒有任何返回類型的聲明
2.調用
自動
手動

析構函數
聲明周期結束后自動調用
先創建的對象后釋放

#include <iostream>class Test { public:Test();void printP(void);~Test();private:int a;char* p; };Test::Test() {a = 10;p = (char*)malloc(100);strcpy(p, "aaafffafa");std::cout << "我是構造函數" << std::endl; }void Test::printP(void) {std::cout << a << std::endl;std::cout << p << std::endl; }Test::~Test() {if (p != NULL){free(p);}std::cout << "我是析構函數,我被調用了" << std::endl; }void objplay() {Test t1;t1.printP();std::cout << "先創建的對象后釋放" << std::endl;Test t2;t2.printP(); }int main() {objplay();std::cout << "Hello World!\n"; }

構造和析構的演示

#include <iostream>class Test { public:Test();void printP(void);~Test();private:int a;char* p; };Test::Test() {a = 10;p = (char*)malloc(100);strcpy(p, "aaafffafa");std::cout << "我是構造函數" << std::endl; }void Test::printP(void) {std::cout << a << std::endl;std::cout << p << std::endl; }Test::~Test() {if (p != NULL){free(p);}std::cout << "我是析構函數,我被調用了" << std::endl; }void objplay() {Test t1;t1.printP();std::cout << "先創建的對象后釋放" << std::endl;Test t2;t2.printP(); }int main() {objplay();std::cout << "Hello World!\n";return 0; }

構造函數的分類

#include <iostream>class Test2 { public:Test2();Test2(int a);Test2(int a, int b);Test2(const Test2& obj);void printT(void);~Test2();private:int m_a;int m_b; };Test2::Test2() {m_a = 0;m_b = 0;std::cout << "無參構造函數" << std::endl; }Test2::Test2(int a) {m_a = a;m_b = 0;std::cout << "無參構造函數" << std::endl; }Test2::Test2(int a, int b) {m_a = a;m_b = b;std::cout << "有參構造函數" << std::endl; }Test2::Test2(const Test2& obj) {std::cout << "我也是構造函數" << std::endl; }void Test2::printT(void) {std::cout << "我是普通成員函數" << std::endl; }Test2::~Test2() { }void objplay2() {Test2 t1;t1.printT();Test2 t2(1, 2);t2.printT();Test2 t3 = (1, 2);t3.printT();Test2 t4 = Test2(1, 2);t4.printT();}int main2() {objplay2();std::cout << "Hello World!\n";return 0; }

構造和析構的綜合練習

#include <iostream>class ABCD { public:ABCD(int a, int b, int c);~ABCD(); public:int getA();private:int a;int b;int c; };ABCD::ABCD(int a, int b, int c) {this->a = a;this->b = b;this->c = c;std::cout << "ABCD() construct,a:" << this->a << "b:" << this->b << "c:" << this->c << std::endl; }ABCD::~ABCD() {std::cout << "~ABCD() construct,a:" << this->a << "b:" << this->b << "c:" << this->c << std::endl; }int ABCD::getA() {return this->a; }class MyE { public:MyE();MyE(const MyE& obj);~MyE();public:ABCD abcd1;ABCD abcd2;const int m; private: };MyE::MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100) { }MyE::MyE(const MyE& obj) : abcd1(7, 8, 9), abcd2(10, 11, 12), m(100) {std::cout << "MyE(const My & obj)" << std::endl; }MyE::~MyE() {std::cout << "MyE()" << std::endl; }int doThing(MyE mye1) {std::cout << "doThing() mye1.abc1.a" << mye1.abcd1.getA() << std::endl;return 0; }int run2() {MyE myE;doThing(myE);return 0; }int run3() {std::cout << "run3 start.." << std::endl;//ABCD(400, 500, 600);ABCD abcd = ABCD(100, 200, 300);std::cout << "run3 end.." << std::endl;return 0; }int main3311() {//run2();run3();std::cout << "Hello World" << std::endl;return 0; }

構造函數調用規則研究

#include <iostream>class Test_1 { public:Test_1();Test_1(int a, int b);Test_1(const Test_1& obj);void printT();private:int m_a;int m_b; };Test_1::Test_1() {m_a = 0;m_b = 0; }Test_1::Test_1(int a, int b) {m_a = a;m_b = b; }Test_1::Test_1(const Test_1& obj) {m_a = obj.m_a;m_b = obj.m_b; }void Test_1::printT() { }void object_play24() {Test_1 t1; }int main621() {object_play24();std::cout << "Hello World!\n";return 0; }

copy構造函數的調用時機

#include <iostream>class Test4 { public:Test4();Test4(int a, int b);Test4(const Test4& obj);void printT();~Test4();private:int m_a;int m_b; };Test4::Test4() {m_a = 0;m_b = 0;std::cout << "我是構造函數" << std::endl; }Test4::Test4(int a, int b) {m_a = a;m_b = b; }Test4::Test4(const Test4& obj) {std::cout << "我也是構造函數" << std::endl;m_a = obj.m_a + 100;m_b = obj.m_b + 100; }void Test4::printT() {std::cout << "我是普通成員函數" << std::endl;std::cout << "m_a: " << m_a << std::endl;std::cout << "m_b: " << m_b << std::endl; }Test4::~Test4() {std::cout << "我是析構函數" << std::endl; }int main4() {Test4 t1(1, 2);Test4 t0(1, 2);t0 = t1;/*Test4 t2 = t1;t2.printT();*/Test4 t2(t1);t2.printT();std::cout << "Hello World!\n";return 0; }

copy構造函數

#include <iostream>class Location { public:Location(int x = 0, int y = 0);Location(const Location& obj);~Location();public:int getX();int getY();private:int m_x;int m_y; };Location::Location(int x, int y) {m_x = x;m_y = y;std::cout << "Constructor Object." << std::endl; }Location::Location(const Location& obj) {m_x = obj.m_x;m_y = obj.m_y; }int Location::getX() {return m_x; }int Location::getY() {return m_y; }Location::~Location() {std::cout << "Object Destroyed." << std::endl; }void f(Location p) {std::cout << p.getX() << std::endl;std::cout << p.getY() << std::endl; }void object_play() {Location a(1, 2);Location b = a;f(b);//b實參去初始化p,會調用拷貝構造函數 }int main5() {object_play();std::cout << "Hello World!\n";return 0; }

拷貝構造函數的第四種應用場景

#include <iostream>class Location1 { public:Location1(int x = 0, int y = 0);Location1(const Location1& obj);~Location1();public:int getX();int getY();private:int m_x;int m_y; };Location1::Location1(int x, int y) {m_x = x;m_y = y;std::cout << "Constructor Object." << std::endl; }Location1::Location1(const Location1& obj) {m_x = obj.m_x;m_y = obj.m_y; }int Location1::getX() {return m_x; }int Location1::getY() {return m_y; }Location1::~Location1() {std::cout << "Object Destroyed." << std::endl; }void f(Location1 p) {std::cout << p.getX() << std::endl;std::cout << p.getY() << std::endl; }//返回一個元素 Location1 g() {Location1 A(1, 2);return A; }void object_play21() {g(); }void object_play22() {Location1 m = g();//匿名對象不析構 初始化 }void object_play23() {Location1 m2(1, 2);m2 = g();//匿名對象 被析構 賦值 }int main61() {object_play23();std::cout << "Hello World!\n";return 0; }

構造函數的調用規則

#include <iostream>class Test_1 { public:Test_1();Test_1(int a, int b);Test_1(const Test_1& obj);void printT();private:int m_a;int m_b; };Test_1::Test_1() {m_a = 0;m_b = 0; }Test_1::Test_1(int a, int b) {m_a = a;m_b = b; }Test_1::Test_1(const Test_1& obj) {m_a = obj.m_a;m_b = obj.m_b; }void Test_1::printT() { }void object_play24() {Test_1 t1; }int main621() {object_play24();std::cout << "Hello World!\n";return 0; }

淺拷貝和深拷貝分析

#include <iostream>class Name { public:Name();Name(const char *my);Name(const Name& obj);~Name();private:char* p;int len; };Name::Name() {p = NULL;len = 0; }Name::Name(const char* myp) {len = strlen(myp);myp = (char*)malloc(len + 1);strcpy(p, myp); }Name::Name(const Name& obj) {len = obj.len;p = (char*)malloc(len + 1);strcpy(p, obj.p); }Name::~Name() {if (p != NULL){free(p);p = NULL;len = 0;} }void obj_play_y() {Name obj1("asodfa");Name obj2 = obj1;Name obj3("obj3");obj3 = obj1; //淺拷貝 等號賦值 顯示重載等號操作符 }int main27() {obj_play_y();std::cout << "Hello World" << std::endl;return 0; }

構造函數的初始化列表

#include <iostream>class A { public:A(int _a);~A();private:int a; };A::A(int _a) {a = _a;std::cout << "構造函數a:" << a << std::endl; }A::~A() {std::cout << "析構函數a:" << a << std::endl; }class B { public:B(int _b1, int _b2, int m, int n);~B();private:int b1;int b2;A a1;A a2;const int c; };B::B(int _b1, int _b2, int m, int n) : a1(m), a2(n) , c(0) {b1 = _b1;b2 = _b2;}B::~B() {std::cout << "析構函數B:" << std::endl; }void playObj() {//參數傳遞;B objB(1, 2, 3, 4);//調用順序// 構造函數 如果子和對象有多個,按照定義順序 不是初始化列表順序// 析構函數 和構造函數相反 }int main190() {playObj();std::cout << "Hello World" << std::endl;return 0; }

new 和 delete 的用法

基本語法

#include <iostream>int main1301() {int* a = (int*)malloc(sizeof(int));*a = 10;//int* p = new int;*p = 20;free(p);int *p1 = new int(30);delete p1;std::cout << "Hello World" << std::endl;return 0; } //分配數組 int main1302() {int* p = (int*)malloc(sizeof(int) * 10); //int array[10];p[0] = 1;free(p);//c++ 分配數組int* pArray = new int[10];pArray[1] = 2;delete[] pArray; //數組加[]std::cout << "Hello World" << std::endl;return 0; }class MyTest { public:MyTest(int a);~MyTest();private:int a; };MyTest::MyTest(int a) {this->a = a;std::cout << "構造函數執行" << std::endl; }MyTest::~MyTest() {std::cout << "析構函數執行" << std::endl; }//分配對象 int main13221() {//c 語言MyTest* pT1 = (MyTest*)malloc(sizeof(MyTest));free(pT1);//c++MyTest* pT2 = new MyTest(10);delete pT2;std::cout << "Hello World" << std::endl;return 0; }

深入分析

#include <iostream>int main13021() {int* a = (int*)malloc(sizeof(int));*a = 10;//int* p = new int;*p = 20;delete p;//free(p);int* p1 = new int(30);delete p1;std::cout << "Hello World" << std::endl;return 0; } //分配數組 int main122321() {int* p = (int*)malloc(sizeof(int) * 10); //int array[10];p[0] = 1;//free(p);delete[] p;//c++ 分配數組int* pArray = new int[10];pArray[1] = 2;//delete[] pArray; //數組加[]delete[] pArray;std::cout << "Hello World" << std::endl;return 0; }class MyTest1 { public:MyTest1(int a);~MyTest1();private:int a; };MyTest1::MyTest1(int a) {this->a = a;std::cout << "構造函數執行" << std::endl; }MyTest1::~MyTest1() {std::cout << "析構函數執行" << std::endl; }//分配對象 int main1401() {//c 語言MyTest1* pT1 = (MyTest1*)malloc(sizeof(MyTest1));delete(pT1);//c++MyTest1* pT2 = new MyTest1(10);free(pT2);std::cout << "Hello World" << std::endl;return 0; }

靜態成員變量和靜態成員函數

#include <iostream>class BB { public:BB();~BB(); public:int getC();static void getCC();int AddC();private:int a;int b;static int c; };BB::BB() { }BB::~BB() { }int BB::getC() {return c; }void BB::getCC() {std::cout << "c:" << c << std::endl; }int BB::AddC() {return c++; }int BB::c = 10;int main123346534() {BB b1, b2, b3;std::cout << b1.getC() << std::endl;b2.AddC();std::cout << b3.getC() << std::endl;b3.getCC();BB::getCC();std::cout << "Hello World" << std::endl;return 0; }

this 指針

#include <iostream>class TTest { public:TTest(int a, int b); //Test(Test* this, int a, int b)~TTest(); public:void printT();private:int a;int b; };TTest::TTest(int a, int b) {this->a = a;this->b = b; }TTest::~TTest() { }void TTest::printT() {std::cout << "a" << a << std::endl;std::cout << "b" << b << std::endl; }int main113322() {TTest tt1(1, 2);tt1.printT();std::cout << "Hello World" << std::endl;return 0; }

總結

以上是生活随笔為你收集整理的c++基础day03的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。