1. 程式人生 > >多型性-類成員運算子過載

多型性-類成員運算子過載

1、如果運算子作為類的成員函式過載,其引數個數要比該運算子實際引數個數少一個。其第一個引數是通過物件的this指標傳遞的,this指標是一個隱含的引數,有c++編譯系統自行處理。而靜態成員函式沒有this指標,所以不能將運算子過載為類的靜態成員函式。2、二元運算子          二元運算子又稱為雙目運算子,就是需要兩個操作引數的運算子,如:+、-、*、/等。其過載形式如下:    class x             {                 .....                T1 operator @(T2 B) {......};            }其中@表示任何一個可過載的二元運算子,T1是運算子函式的返回型別,T2是引數的型別,原則上T1、T2可以是任何資料型別,但事實上它們常與X相同。3、常見的二元運算子的呼叫形式為 [email protected],而上述過載的二元運算子函式的呼叫形式為 [email protected](b)或者[email protected](a,b)4、以過載複數類complex的運算子為例,實現兩個複數的加、減、乘、除運算
#include<iostream>

using namespace std;

class complex
{
private:
    double r,i;
public:
    complex(double R=0,double I=0):r(R),i(I){}
    complex operator + (complex b);/****複數加法***/
    complex operator - (complex b);/****複數減法***/
    complex operator * (complex b);/****複數乘法***/
    complex operator / (complex b);/****複數除法***/
    int display();
};

/****複數加法***/
complex complex::operator + (complex b)
{
    return complex(r+b.r,i+b.i);
}

/****複數減法***/
complex complex::operator - (complex b)
{
    return complex(r-b.r,i-b.i);
}

/****複數乘法***/
complex complex::operator * (complex b)
{
    complex t;
    t.r=r*b.r-i*b.i;
    t.i=r*b.i+i*b.r;
    return t;
}

/****複數除法***/
complex complex::operator / (complex b)
{
    complex t;
    double x;
    x=1/(b.r*b.r+b.i*b.i);
    t.r=x*(r*b.r+i*b.i);
    t.i=x*(i*b.i-r*b.r);
    return t;
}

/****對個運算的輸出***/
int complex::display()
{
    if(i==0)
    {
        cout<<r<<endl;
    }
    else if(i<0)
    {
        cout<<r<<i<<"i"<<endl;
    }
    else
    {
        cout<<r<<"+"<<i<<"i"<<endl;
    }
}

/*****主函式檢驗*****/
int main()
{
    complex c1(2,6),c2(7,-4),c31,c32,c33,c34;
    complex c4(2,6),c5(7,-6),c61,c62,c63,c64;
    complex c7(2,6),c8(7,-8),c91,c92,c93,c94;
    c31=c1+c2;
    c32=c1-c2;
    c33=c1*c2;
    c34=c1/c2;
    c31.display();
    c32.display();
    c33.display();
    c34.display();
    cout<<endl;
    c61=c4+c5;
    c62=c4-c5;
    c63=c4*c5;
    c64=c4/c5;
    c61.display();
    c62.display();
    c63.display();
    c64.display();
    cout<<endl;
    c91=c7+c8;
    c92=c7-c8;
    c93=c7*c8;
    c94=c7/c8;
    c91.display();
    c92.display();
    c93.display();
    c94.display();
    cout<<endl;
    return 0;
}
5、執行截圖:

相關推薦

-成員運算子過載

1、如果運算子作為類的成員函式過載,其引數個數要比該運算子實際引數個數少一個。其第一個引數是通過物件的this指標傳遞的,this指標是一個隱含的引數,有c++編譯系統自行處理。而靜態成員函式沒有this指標,所以不能將運算子過載為類的靜態成員函式。2、二元運算子     

c++——、繼承、運算子過載綜合例子程式碼

#include <iostream> #include <string.h> using namespace std; class A { private: char *name; public: A(char *n); v

——運算子過載(一)

多型性是指不同的物件收到相同的資訊是,產生不同的行為。C++中可以用同一個函式名呼叫不同內容的函式,這些函式執行不同但又類似的操作,這樣就可以用同一個函式名呼叫不同內容的函式。 一個源程式經過編譯,連

通過確定人類的說話行為

實現效果:    知識運用:       實現程式碼: class People { //定義一個虛方法表示人說話的行為 public virtual void Say(RichTextBox rtb,

C++物件中虛擬函式與的實現

在面向物件程式設計時,有時會遇到這種需求:我們希望同一個方法在基類和派生類中實現不同的功能,即體現出行為上的多型性。一般有兩種方法可以實現這種需求,其一是在派生類中重新定義基類中方法,其二是使用虛擬函式。這裡主要記錄利用虛擬函式實現多型性的方法。 類中虛擬函式的定義方法 虛擬函式

java中成員變數和方法呼叫問題

class Super { String name = "父類名字"; public void setName(String name) { System.out.println(this.getClass());

複用的體現

一,繼承語法 1,成員預設的訪問許可權是包,包內其他類都可以訪問;而繼承其他的類只能訪問public成員;為了繼承,一般性規則是,把資料成員變數設定為private,使之不能被訪問 2,繼承的方法被覆蓋之後不能在本方法直接被呼叫,否則會產生遞迴,這不是我們期望看到的結果,一般情況下會使用super呼叫基類

C++ 過載運算子 運算子過載函式作為成員函式 過載運算子+

用運算子過載函式作為類成員函式的方法過載運算子+ 下面的例子來自於課本: #include <iostream> using namespace std; class Complex {

Java的設計----及其應用

多型性及其應用 多型性 多型—在Java中,子類的物件可以替代父類的物件使用一個變數只能有一種確定的資料型別一個引用型別變數可能指向(引用)多種不同型別的物件  Person p = new Stud

C++中過載

引數傳遞有傳值、傳址和引用三種void f(int n){}//定義傳值方式 int a; f(a);//呼叫傳值方式 void f(int *n){}//定義傳址方式 int a; f(&a);//呼叫傳址方式 void f(int &n){}//定義引用方式 int a; f(a);//呼

PHP的封裝、繼承性和

一、類的封裝性 1、什麼是類的封裝性 1)類的三大特性:封裝性、繼承性、多型性; 2)封裝性:將敏感的資料保護起來,不被外界訪問;還可以理解為,將一個功能的方方面面,封裝成一個整體,即類; 3)類的封裝性,是通過訪問許可權修飾符來實現的; 4)在專案中,屬性基本都是私有的

java 過載:子動態繫結靜態過載

問題: 子類能否過載父類的型別? 答: 完全可以,先看一個例子,接下來會有另一種情況 public class Son extends Father{public void test(int i){System.out.println("This is from Son c

c++之(動態繫結)

多型性 指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。C++支援兩種多型性:編譯時多型性,執行時多型性。   a、編譯時多型性:通過過載函式實現    b、執行時多型性:通過虛擬函式實現  多型性可以簡單地概括為“一

Java 面向物件 --

1,方法的過載和重寫; 2,可以用父類的引用指向子類的具體實現,而且可以隨時更換為其他子類的具體實現; 父類Animal: package com.java1234.chap03.sec13; public class Animal { public void say(){

JAVA的----父與子轉換問題

JAVA語言中, 物件變數是多型的 每個子類物件都算是父類物件(子類物件可以當作父類變數所引用) 那反過來可不可以呢? 答案是取決於父類變數引用的是誰 如果父類變數引用的是子類物件的例項, 可以通過強轉被子類變數引用 如果父類變數引用的是父類物件的例項,則不能被為子類變數引用

golang教程之-Go面向物件

文章目錄 多型性-Go面向物件 使用介面的多型性 在上述計劃中新增新的收入流 多型性-Go面向物件 https://golangbot.com/polymorphism/ Go中的多型性是在介面

面向物件【林老師版】:(十三)

一、多型 多型指的是一類事物有多種形態,比如 1、動物有多種形態:人,狗,豬 import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self):

清華大學《C++語言程式設計進階》線上課程筆記06---繼承、派生、

類的繼承 保持已有類的特性而構造新類的過程稱為繼承; 實現設計與程式碼的重用. 在已有類的基礎上新增自己的特性而產生新類的過程稱為派生 當新的問題出現,原有程式無法解決(或不能完全解決)時,需要對原有程式進行改造 派生類的構成 吸收基類成員 預設情況下派生類包含了全部基

Effective C++筆記之七:為宣告virtual解構函式

應該為多型基類宣告virtual解構函式,否則容易造成記憶體洩露。 因為C++明白指出,當derived class物件經由一個base class指標被刪除,而該base class如果帶有一個non-virtual解構函式,其結果未定義一實際執行時通常發生的是物件的derived成分沒

Java詳細舉例說明(很經典例子)

(一)相關類 class A …{            public String show(D obj)…{