作業11: 類_運算子過載
作業11: 類_運算子過載
1.設向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),則它們之間的加、減和積分別定義為:
X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 )
X - Y = ( x1 - y1 , x2 - y2 , x3 - y3 )
X * Y = x1 * y1 + x2 * y2 + x3 * y3
程式設計序定義向量類vector,過載運算子“+”、“-”、“*”和“=”,實現向量之間的加、減、乘和賦值運算。用過載運算子“>>”、“<<”做向量的輸入/輸出操作。
2.定義一個類nauticalmile_kilometer,它包含兩個資料成員kilometer(千米)和meter(米)。還包含一個建構函式對資料成員初始化;成員函式print用於輸出資料成員kilometer和meter的值;型別轉換函式double()實現把千米和米轉換為海里(1海里=1.852千米)。編寫main函式,測試類nauticalmile_kilometer。
3.教材p343頁第3小題。
定義一個複數類Complex,過載運算子“+”,使之能用於複數的加法運算。參加運算的兩個運算量可以都是類物件,也可以其中有一個是整數,順序任意。例如:c1+c2, i+c1, c1+i , 均合法(設i為整數,c1,c2 為複數)。程式設計序,分別求兩個複數之和、整數和複數之和。
/************************************** 作業五 第1題 **************************************** 1.設向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),則它們之間的加、減和積分別定義為: X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 ) X - Y = ( x1 - y1 , x2 - y2 , x3 - y3 ) X * Y = x1 * y1 + x2 * y2 + x3 * y3 程式設計序定義向量類vvector, 過載運算子"+"、"-" 、"*"和"=",實現向量之間的加、減、乘和賦值運算。 用過載運算子">>"、"<<"做向量的輸入/輸出操作。 **********************************************************************************************/ // H5t1.cpp #include <iostream> #include <string> using namespace std; #include "vvector.h" int main() { vvector first; vvector second; char choice; // 定義string的menu時,=後面的內容直接用雙引號“” string menu = "————————————\n" "| 請選擇想要執行的運算 |\n" "| 1.兩向量間的加法 |\n" "| 2.兩向量間的減法 |\n" "| 3.兩向量間的乘法 |\n" "| 4.我需要退出系統 |\n" "————————————\n" "我的選擇是:"; // strart to do-while circulate do // do-while 迴圈裡面,需要用{},在while後,得加上分號; { cout << menu; enteragain: //此處定位,用於重新輸入 cin >> choice; cout << endl; switch(choice) { case '1': { cout << "第一個向量:" << endl; cin >> first; cout << "第二個向量:" << endl; cin >> second; cout << (first + second); break; } case '2': { cout << "第一個向量:" << endl; cin >> first; cout << "第二個向量:" << endl; cin >> second; cout << (first - second); break; } case '3': { cout << "第一個向量:" << endl; cin >> first; cout << "第二個向量:" << endl; cin >> second; cout << (first * second); break; } case '4': break; default: { cout << "\n你的輸入不正確,請重新輸入:"; if(1) goto enteragain; break; } } cout << "執行成功。" << endl << endl << endl << endl << "請繼續:" << endl; } while(choice != '4'); // 不要忘了分號 ; return 0; }
/************************************** 作業五 第1題 **************************************** 1.設向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),則它們之間的加、減和積分別定義為: X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 ) X - Y = ( x1 - y1 , x2 - y2 , x3 - y3 ) X * Y = x1 * y1 + x2 * y2 + x3 * y3 程式設計序定義向量類vvector, 過載運算子"+"、"-" 、"*"和"=",實現向量之間的加、減、乘和賦值運算。 用過載運算子">>"、"<<"做向量的輸入/輸出操作。 **********************************************************************************************/ // vvector.h #include <iostream.h> class vvector { private: double x; double y; double z; public: friend vvector operator + (const vvector&, const vvector&); friend vvector operator - (const vvector&, const vvector&); friend double operator * (const vvector&, const vvector&); friend istream& operator >> (istream& inp, vvector& in); friend ostream& operator << (ostream& outp, const vvector& ou); }; // + vvector operator + (const vvector& f, const vvector& s) { vvector re; cout << "( " << f.x << "+" << s.x << ", " << f.y << "+" << s.y << ", " << f.z << "+" << s.z << " ) = " ; re.x = f.x + s.x; re.y = f.y + s.y; re.z = f.z + s.z; return re; } // - vvector operator - (const vvector& f, const vvector& s) { vvector re; cout << "( " << f.x << "-" << s.x << ", " << f.y << "-" << s.y << ", " << f.z << "-" << s.z << " ) = " ; re.x = f.x - s.x; re.y = f.y - s.y; re.z = f.z - s.z; return re; } // * double operator * (const vvector& f, const vvector& s) { cout << f.x << "*" << s.x << " + " << f.y << "*" << s.y << " + " << f.z << "*" << s.z << " = " ; return double (f.x * s.x + f.y * s.y + f.z * s.z); } // >> istream& operator >> (istream& inp, vvector& in) { cout << "請輸入該向量的橫座標: "; inp >> in.x; cout << "\n請輸入該向量的縱座標:"; inp >> in.y; cout << "\n請輸入該向量的豎座標:"; inp >> in.z; cout << endl; return inp; } // << ostream& operator << (ostream& outp, const vvector& ou) { outp << "(" << ou.x << ", " << ou.y << ", " << ou.z << ")"; outp << endl << endl; return outp; }
/********************* 作業五 第02題 ************************************
2.定義一個類 nauticalmile_kilometer,
它包含兩個資料成員kilometer(千米)和meter(米)。
還包含一個建構函式對資料成員初始化;
成員函式print用於輸出資料成員kilometer和meter的值;
型別轉換函式double()實現把千米和米轉換為海里(mile)(1海里=1.852千米)。
編寫main函式,測試類nauticalmile_kilometer。
****************************************************************************/
// H5t2.cpp
#include <iostream>
#include "nk.h"
using namespace std;
// typename nauticalmile_kilometer nk; // 用個別名,方便編寫
int main()
{
nauticalmile_kilometer m(18520, 0); // 建構函式中千米的資料為0
nauticalmile_kilometer km(0, 18520); // 建構函式中米的資料為0
nauticalmile_kilometer mkm(18520, 18520); // 建構函式中兩者資料皆不為0
nauticalmile_kilometer nmkm(0, 0); // 建構函式中兩者資料皆為0
// explain
cout << "該實驗測試將類型別強制轉換成double型。"
<< "其中類型別包含了(千米、米)兩個資料。 "
<< endl << endl;
// 強制轉換前的顯示
cout << "強制轉換前:" << endl << endl;
cout << " 當建構函式中千米的資料為0時" << endl;
m.print();
cout << " 當建構函式中米的資料為0時" << endl;
km.print();
cout << " 當建構函式中兩者資料皆不為0" << endl;
mkm.print();
cout << " 當建構函式中兩者資料皆為0" << endl;
nmkm.print();
cout << endl << endl;
// 實行強制轉換
(double) (m);
(double) (km);
(double) (mkm);
(double) (nmkm);
// 強制顯示後的顯示
cout << "強制轉換後:" << endl << endl;
cout << " 當建構函式中千米的資料為0時" << endl;
m.print();
cout << " 當建構函式中米的資料為0時" << endl;
km.print();
cout << " 當建構函式中兩者資料皆不為0" << endl;
mkm.print();
cout << " 當建構函式中兩者資料皆為0" << endl;
nmkm.print();
cout << endl << endl;
while(2);
return 0;
}
/********************* 作業五 第02題 ************************************
2.定義一個類 nauticalmile_kilometer,
它包含兩個資料成員kilometer(千米)和meter(米)。
還包含一個建構函式對資料成員初始化;
成員函式print用於輸出資料成員kilometer和meter的值;
型別轉換函式double()實現把千米和米轉換為海里(mile)(1海里=1.852千米)。
編寫main函式,測試類nauticalmile_kilometer。
****************************************************************************/
// nk.h -- to define a class nauticalmile_kilometer
#include <iostream.h>
class nauticalmile_kilometer
{
private:
double meter;
double kilometer;
public:
int print();
nauticalmile_kilometer(double m = 0, double km = 0):meter(m), kilometer(km) {}
operator double();
};
// print
int nauticalmile_kilometer::print()
{
cout << "meter = " << meter << "\t";
cout << "kilometer = " << kilometer;
cout << endl;
return 0;
}
// operator typeName();
nauticalmile_kilometer::operator double()
{
// only kilometer
if (meter == 0 && kilometer != 0)
{
kilometer = kilometer / 1.825;
return kilometer;
}
// only meter
else if (meter != 0 && kilometer == 0)
{
meter = meter / 1000 / 1.825;
return meter;
}
// kilometer && meter
else if (meter != 0 && kilometer != 0)
{
meter = meter / 1000 / 1.825;
kilometer = kilometer / 1.825;
return 0;
}
// nothing to print , when both == 0
else
return 0;
}
/************************** 作業五 習題三 *********************************
定義一個複數類Complex,過載運算子"+",使之能用於複數的加法運算。
參加運算的兩個運算量可以都是類物件,也可以其中有一個是整數,順序任意。
例如:c1+c2, i+c1, c1+i , 均合法(設i為整數,c1,c2 為複數)。
程式設計序,分別求兩個複數之和、整數和複數之和。
****************************************************************************/
// H5t3.cpp -- Complex operation
#include <iostream>
using namespace std;
#include "complex.h"
int main()
{
// definition
complex c1;
complex c2;
complex c;
int i;
// enter
cout << "輸入資料:" << endl << endl;
cout << "第一個複數:" << endl;
c1.enter();
cout << "第二個複數:" << endl;
c2.enter();
cout << "請輸入一個整數:" ;
cin >> i;
cout << endl << endl;
// display & calculate
cout << "以下是運算結果:" << endl;
cout << "1.兩複數相加: ";
c1.display();
cout << " + ";
c2.display();
cout << " = ";
(c1 + c2).display();
cout << endl;
cout << endl;
cout << "2.複數與整數相加: " << endl;
cout << i << " + ";
c1.display();
cout << " = ";
(i + c1).display();
cout << endl;
c2.display();
cout << " + " << i ;
cout << " = ";
(c2 + i).display();
cout << endl;
while(2);
return 0;
}
/************************** 作業五 習題三 *********************************
定義一個複數類Complex,過載運算子"+",使之能用於複數的加法運算。
參加運算的兩個運算量可以都是類物件,也可以其中有一個是整數,順序任意。
例如:c1+c2, i+c1, c1+i , 均合法(設i為整數,c1,c2 為複數)。
程式設計序,分別求兩個複數之和、整數和複數之和。
****************************************************************************/
// complex.h
#include <iostream>
class complex
{
private:
double real;
double image;
public:
void display();
void enter();
friend complex operator + (const complex& , const complex&);
friend complex operator + (const complex& , const int& );
friend complex operator + (const int& , const complex& );
};
// c+c
complex operator + (const complex& c1, const complex& c2)
{
complex c;
c.real = c1.real + c2.real;
c.image = c1.image + c2.image;
return c;
}
// c+i
complex operator + (const complex& c, const int& i)
{
complex c1;
c1.real = c.real + double(i);
c1.image = 0;
return c1;
}
// i+c
complex operator + (const int& i, const complex& c)
{
complex c1;
c1.real = c.real + double(i);
c1.image = 0;
return c1;
}
// display
void complex::display()
{
cout << "( " << real << " + " << image << "i" << " )";
}
// enter
void complex::enter()
{
cout << "請輸入實部:" ;
cin >> real;
cout << "請輸入虛部:" ;
cin >> image;
}
相關推薦
作業11: 類_運算子過載
作業11: 類_運算子過載1.設向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),則它們之間的加、減和積分別定義為:X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 ) X - Y = ( x1 - y1 , x2
YTUOJ——C++時間類的運算子過載
題目描述 C++時間類的運算子過載 定義一個時間類Time,其資料成員為表示時間的小時(hour)、分(minute),秒(second)。 過載運算子“+”,使之能用於時間物件的加法運算;過載運算子“<<”,使之能用於時間物件的輸出操作。 (1)參加運算的兩個運算元可以都是時間
《C++第九周實驗報告3-1》----接第8周任務3,定義分數類中運算子過載,實現分數的輸入輸出
/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱: CFraction.cpp *
2014第八週專案三--分數類的運算子過載
/* *程式的版權和版本宣告部分: *Copyright(c)2014,煙臺大學計算機學院學生 *All rights reserved. *檔名稱: *作者:劉曉曉 *完成日期:2014年 04月15號 *版本號:v1.0 *對任務及求解方法的描述部分: *輸入描述: 無
C++_運算子過載的注意事項
1、過載操作符沒必要一定是成員函式,還可以是友元函式。 2、過載操作符函式為成員函式主要是你需要操作類內部的成員, 必須是成員函式或友元函式才行。 3、至於由深淺拷貝的原因要使其成為成員函式,這個不知道。 4、如果運算子被過載為全域性函式,那麼只有一個
8_3分數類的運算子過載
#include <iostream> using namespace std; class CFraction {private: int nume; // 分子 int deno;
多型性-類成員運算子過載
1、如果運算子作為類的成員函式過載,其引數個數要比該運算子實際引數個數少一個。其第一個引數是通過物件的this指標傳遞的,this指標是一個隱含的引數,有c++編譯系統自行處理。而靜態成員函式沒有this指標,所以不能將運算子過載為類的靜態成員函式。2、二元運算子
複數類的運算子過載
#include <iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,dou
[c++]String字串類的運算子過載
在c++中有一個新定義的型別string,可以不用那麼麻煩的操作字串,並且一些高階的運算子過載讓她的使用更加便捷 下面是String類的定義和成員函式的定義: #ifndef operator_operator_h #define operator_operator_h
string類中運算子過載的實現
#include<iostream> using namespace std; class MyString { public: MyString(); MyString(const int number); MyStri
類,運算子過載,this指標
class Complex { private : double m_real; double m_imag; public: // 無引數建構函式 // 如果建立一個類你沒有寫任何建構函式,則系統會自動
C++類和物件.四個預設成員函式(賦值運算子過載)
1.(1)類的定義 類就是具有相同資料和相同操作的一組物件的集合。 學生類定義: class student {//成員變數char* name;int age;int sex;//成員函式void speak(){cout<<name<<"年
運算子過載(18.11.17)
一、運算子過載:自定義型別和內建型別滿足的相同的邏輯。分為兩種: 1.普通運算子過載: 1>. <運算子過載,程式碼如下: bool operator<(int rhs) //int rhs形參作為右運算元 { return mdata<rhs; //mdata類成員
運算子過載:string類
運算子過載規則如下: ①、 C++中的運算子除了少數幾個之外,全部可以過載,而且只能過載C++中已有的運算子。 ②、 過載之後運算子的優先順序和結合性都不會改變。 ③、 運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原
運算子過載:複數類
運算子的過載: 1,只能過載已存在的運算子 2,自定義型別和內建滿足的相同的邏輯 1.普通運算子可以過載 2.型別過載 const : 1、防止實參被修改; 2、接收隱式生成臨時物件; 類內是this_call的呼叫約定,成員方法隱藏this指標,指向一般為左
JavaSE—11.抽象類_介面
抽象類 用abstract關鍵字來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法 含有抽象方法的類必須被宣告為抽象類,抽象類必須被繼承,抽象方法必須被重寫 抽象類不能被例項化 抽象方法只需宣告,而不需實現 abstra
類運算子過載
首先定義一個簡單的類,用它來實現int型別資料的加減乘除等功能。 class Int { public: Int() : m_value(0) {} /
定義一個複數類Complex,過載運算子“+”,“-”,“*”,“/”,使之能用於複數的加、減、乘、除。運算子過載函式作為Complex類的成員函式。編寫程式,分別求兩個複數之和、差、積和商。
#include <iostream> #include <iomanip> using namespace std; class Complex { public: Complex(); Complex(double r
定義一個複數類Complex,過載運算子“+”,使之能用於複數的加法運算。參加運算的兩個運算量可以都是類物件,也可以其中有一個是整數,順序任意。例如,c1+c2,i+c1,c1+i均合法(設i為整數,
#include <iostream> #include <iomanip> using namespace std; class Complex { public: Complex() { real=0;
C ++中字串類運算子過載示例
一、基本概念 (一) 函式過載的含義 所謂過載,就是重新賦予新的含義。函式過載就是對一個已有的函式賦予新的含義,使之實現新功能,因此,一個函式名就可以用來代表不同功能的函式,也就是”一名多用”。 (二) 為什麼要進行函式過載 一般情況下,編譯器對現有操作符的運算元是有一定的限制,但是