淺談C++類(lèi)型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)
類(lèi)型轉(zhuǎn)化(運(yùn)算符重載函數(shù))
用轉(zhuǎn)換構(gòu)造函數(shù)可以將一個(gè)指定類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為類(lèi)的對(duì)象。但是不能反過(guò)來(lái)將一個(gè)類(lèi)的對(duì)象轉(zhuǎn)換為一個(gè)其他類(lèi)型的數(shù)據(jù)(例如將一個(gè)Complex類(lèi)對(duì)象轉(zhuǎn)換成double類(lèi)型數(shù)據(jù))。在C++提供類(lèi)型轉(zhuǎn)換函數(shù)(type conversion function)來(lái)解決這個(gè)問(wèn)題。類(lèi)型轉(zhuǎn)換函數(shù)的作用是將一個(gè)類(lèi)的對(duì)象轉(zhuǎn)換成另一類(lèi)型的數(shù)據(jù)。
類(lèi)型轉(zhuǎn)換函數(shù)的一般形式為:
operator 類(lèi)型名( ){
實(shí)現(xiàn)轉(zhuǎn)換的語(yǔ)句
}
下面是簡(jiǎn)單實(shí)現(xiàn)。這時(shí)候,Base起了兩方面的作用:類(lèi)和數(shù)據(jù)類(lèi)型。系統(tǒng)會(huì)在需要的時(shí)候自動(dòng)調(diào)用對(duì)應(yīng)的類(lèi)方法。
#include <iostream>
using namespace std;
class Base{
private:
float x;
int y;
public:
Base (float xx=0,int yy=0){
x = xx;
y = yy;
}
operator float (){
return x;
}
operator int (){
return y;
}
void display(){
cout<<"x is :"<<x<<";y is :"<<y<<endl;
}
};
int main()
{
Base base(1.0,2);
base.display();
int y= base;
float x= base;
cout<<"NewX is :"<<x<<"NewY is:"<<y<<endl;
return 0;
}
基本運(yùn)算符重載(自增自減)
主要總結(jié) 自增自減的前置和后置的用法。其他的加減乘除較簡(jiǎn)單。
簡(jiǎn)單的代碼實(shí)現(xiàn)(純語(yǔ)法)
#include <iostream>
using namespace std;
class Base{
private:
float x;
int y;
public:
Base (float xx=0,int yy=0){
x = xx;
y = yy;
}
operator float (){
return x;
}
operator int (){
return y;
}
Base operator ++(){//前置 ++
x++;
y++;
return *this;
}
Base operator --(){
x--;
y--;
return *this;
}
Base operator ++(int ){//后置 ++
Base temp = *this;
++(*this);
return temp;
}
Base operator --(int ){
Base temp = *this;
--(*this);
return temp;
}
void display(){
cout<<"x is :"<<x<<";y is :"<<y<<endl;
}
};
int main()
{
Base base(1.0,1);
Base tem = base++;
base.display();
tem.display();
Base base2(1.0,1);
tem = ++base2;
base.display();
tem.display();
return 0;
}
發(fā)現(xiàn):
后置和前置的區(qū)別是有無(wú)int參數(shù)。
后置需要申請(qǐng)新的空間,大小是類(lèi)的大小。所以,后置操作會(huì)有額外的時(shí)間空間開(kāi)銷(xiāo)。
盡量使用前置操作:如:for (int i=0;i<n;++i)
以上這篇淺談C++類(lèi)型轉(zhuǎn)化(運(yùn)算符重載函數(shù))和基本運(yùn)算符重載(自增自減)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度和空間復(fù)雜度
算法在編寫(xiě)成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來(lái)衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度,感興趣的同學(xué)可以參考閱讀2023-04-04
C語(yǔ)言實(shí)現(xiàn)電話(huà)簿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話(huà)簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解
C++11標(biāo)準(zhǔn)為C++引入右值引用語(yǔ)法的同時(shí),還解決了一個(gè)短板,即使用簡(jiǎn)單的方式即可在函數(shù)模板中實(shí)現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來(lái)講講二者的應(yīng)用,需要的可以參考一下2022-09-09
編譯錯(cuò)誤error: stray ‘\343’in program的解決方法
以下是對(duì)編譯錯(cuò)誤error: stray ‘\343’in program的解決方法進(jìn)行了詳細(xì)的分析介紹,如遇此問(wèn)題的朋友們可以過(guò)來(lái)參考下2013-07-07
C++第11版本中的一些強(qiáng)大的新特性小結(jié)
這篇文章主要介紹了C++第11版本中的一些強(qiáng)大的新特性小結(jié),需要的朋友可以參考下2015-12-12

