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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++(20)--类型自动转换

發布時間:2023/12/13 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++(20)--类型自动转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類型自動轉換

  • 1.C++內置類型轉換
  • 2.實現自定義類的類型轉換

《老九學堂C++課程》《C++ primer》學習筆記。《老九學堂C++課程》詳情請到B站搜索《老九零基礎學編程C++入門》
-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------

1.C++內置類型轉換

// 自動類型轉換(隱式類型轉換) int num = 111; num = 222.2 + num; // 顯示類型轉換 int num = int(99.9); // C 語言中的顯式類型轉換 int num = (int)99.5;

注意點:不管是自動轉換,還是強制轉換,實質是內置類型已經重載了對應的運算符。一些默認的轉換規則為:
1.浮點->整形:舍棄小數部分
2.整形->浮點:數值不變,存儲形式變了,以指數形式存儲
3.double->float:注意數值
4.字符類型可以賦值給整形變量,此時存入的是字符的ASCLL碼
5.將int、long、short傳遞給char型變量,只將低8位原封不動的送到char型變量中
6.有符號->無符號,連同原來的符號位一起傳送

C++允許自己定義類型轉換規則,通過類的成員函數的形式來實現
將其他類型轉 換為 當前類型需要借助 轉換構造函數

demo: 說明為了獲得目標類型,編譯器會不擇手段,綜合使用內置轉換規則和用戶自定義的規則, 進行多級類型轉換。

// 自定義rectangle類,假設具有三種構造函數 Rectangle(); Rectangle(float width); Rectangle(float width, float height);Rectangle rect(25.5, 18.8); Rectangle rect2; rect2 = rect1 + 98; // 編譯器會根據內置類型規則先將int 類型98轉換為double類型的98.0 // 再根據用戶自定義規則將double類型的98.5轉換成Rectangle類型

再談構造函數:構造函數是在創造對象的時候初始化對象,編譯器會依據傳遞參數不同來匹配不同的構造函數

2.實現自定義類的類型轉換

1.基本類型->當前類型–轉換構造函數實現
2.當前類型->基本類型–類型轉換函數實現
類型轉換函數:將當前的類型轉換成其他類型。只能以成員函數的形式出現,也就是只能出現在類中

形式上沒有返回值,其實是隱式指明了返回值的類型。
沒有參數,因為需要將當前類對象轉換成其他類型。

operator type(){return data; } // 實際上編譯器會把當前對象的地址賦給this 指針,在函數體內部即可以操作當前的對象。 operator float() const{return this->width; }operator float(){return Circle(width * 2); }

demo1:矩形、圓形類型轉換

//mian.cpp #include <iostream> #include "Rectangle.h" using namespace std; void TestRectangle() {Rectangle rect1; // 調用默認構造Rectangle rect2(25.0, 50.5); // 調用代參構造Rectangle rect3(rect1); // 調用拷貝構造// 能夠與基本類型進行互相轉換呢Rectangle rect4 = 55; // 想變成正方型,調用一個參數的構造--轉換構造Rectangle rect5(55);rect4.display(); // Rectangle rect6; // 需要重載加號運算符吧 // rect6 = rect5 + "A" + false;float rect4_width = float(rect4);cout << rect4_width << endl;Circle circle1 = rect4; // 矩形和圓形之間可以相互轉換cout << "圓的信息:" << circle1 << endl;} int main() {TestRectangle();return 0; } //Rectangle.h // // Created by 陳瑩瑩 on 2021/3/10. // #ifndef CHAPTER12_RECTANGLE_H #define CHAPTER12_RECTANGLE_H #include <iostream> #include "Circle.h" using namespace std; // 自定義矩形類class Rectangle { public:Rectangle(); // 無參構造,可以由編譯器自動生成Rectangle(float width, float height); // 代參構造, 用戶定義的普通代參構造Rectangle(const Rectangle & rect); // 拷貝構造,在以拷貝方式初始化對象時調用Rectangle(float width); // 轉換構造--將其他類型轉換為當前類型時使用// 將幾個構造函數融合在一起寫(拷貝構造還是需要單獨寫)---感覺這么寫可以,但是和轉化個構造單獨實現還是不一樣吧 // Rectangle(float width = 0, float height = 0): width(width),height(height) // { // // }// 矩形轉換成floatoperator float() const{return width;}// 矩形轉換成Circle類型operator Circle() const{return Circle(width/2);}void display(){cout << "width:" << width << endl;cout << "height:" << height << endl;}~Rectangle(); // private:int width;int height; }; #endif //CHAPTER12_RECTANGLE_H //Rectangle.cpp // // Created by 陳瑩瑩 on 2021/3/10. //#include "Rectangle.h"Rectangle::Rectangle():width(0),height(0) { }Rectangle::Rectangle(float width, float height):width(width), height(height) {} Rectangle::Rectangle(const Rectangle & rect) { } Rectangle::Rectangle(float width):width(width),height(width) {// 構建了一個矩形 }Rectangle::~Rectangle() { } //Circle.h // // Created by 陳瑩瑩 on 2021/3/10. //#ifndef CHAPTER12_CIRCLE_H #define CHAPTER12_CIRCLE_H #include <iostream> using namespace std; class Circle { public://Circle();Circle(float radius = 0):radius(radius){}friend ostream & operator<<(ostream & out, const Circle & circle);~Circle(); private:float radius;float area; }; #endif //CHAPTER12_CIRCLE_H //Circle.cpp // // Created by 陳瑩瑩 on 2021/3/10. // #include "Circle.h" ostream & operator<<(ostream & out, const Circle & circle) {out << circle.radius;out << endl; } Circle::~Circle() { }

總結

以上是生活随笔為你收集整理的C++(20)--类型自动转换的全部內容,希望文章能夠幫你解決所遇到的問題。

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