第三章????? 函數(shù)
?
3-1 C++中的函數(shù)是什么?什么叫主調(diào)函數(shù),什么叫被調(diào)函數(shù),二者之間有什么關(guān)系?如何調(diào)用一個(gè)函數(shù)?
解:
一個(gè)較為復(fù)雜的系統(tǒng)往往需要?jiǎng)澐譃槿舾勺酉到y(tǒng),高級(jí)語(yǔ)言中的子程序就是用來(lái)實(shí)現(xiàn)這種模塊劃分的。C和C++語(yǔ)言中的子程序就體現(xiàn)為函數(shù)。調(diào)用其它函數(shù)的函數(shù)被稱(chēng)為主調(diào)函數(shù),被其它函數(shù)調(diào)用的函數(shù)稱(chēng)為被調(diào)函數(shù)。一個(gè)函數(shù)很可能既調(diào)用別的函數(shù)又被另外的函數(shù)調(diào)用,這樣它可能在某一個(gè)調(diào)用與被調(diào)用關(guān)系中充當(dāng)主調(diào)函數(shù),而在另一個(gè)調(diào)用與被調(diào)用關(guān)系中充當(dāng)被調(diào)函數(shù)。
調(diào)用函數(shù)之前先要聲明函數(shù)原型。按如下形式聲明:
類(lèi)型標(biāo)識(shí)符 被調(diào)函數(shù)名 (含類(lèi)型說(shuō)明的形參表);
聲明了函數(shù)原型之后,便可以按如下形式調(diào)用子函數(shù):
函數(shù)名(實(shí)參列表)
?
3-2 觀察下面程序的運(yùn)行輸出,與你設(shè)想的有何不同?仔細(xì)體會(huì)引用的用法。
?
源程序:
#include <iostream.h>
int main()
{
int intOne;
int &rSomeRef = intOne;
intOne = 5;
cout << "intOne:\t\t" << intOne << endl;
cout << "rSomeRef:\t" << rSomeRef << endl;
int intTwo = 8;
rSomeRef = intTwo; // not what you think!
cout << "\nintOne:\t\t" << intOne << endl;
cout << "intTwo:\t\t" << intTwo << endl;
cout << "rSomeRef:\t" << rSomeRef << endl;
return 0;
}
程序運(yùn)行輸出:
intOne: 5
rSomeRef: 5
intOne: 8
intTwo: 8
rSomeRef: 8
3-3 比較值調(diào)用和引用調(diào)用的相同點(diǎn)與不同點(diǎn)。
?
解:
值調(diào)用是指當(dāng)發(fā)生函數(shù)調(diào)用時(shí),給形參分配內(nèi)存空間,并用實(shí)參來(lái)初始化形參(直接將實(shí)參的值傳遞給形參)。這一過(guò)程是參數(shù)值的單向傳遞過(guò)程,一旦形參獲得了值便與實(shí)參脫離關(guān)系,此后無(wú)論形參發(fā)生了怎樣的改變,都不會(huì)影響到實(shí)參。
引用調(diào)用將引用作為形參,在執(zhí)行主調(diào)函數(shù)中的調(diào)用語(yǔ)句時(shí),系統(tǒng)自動(dòng)用實(shí)參來(lái)初始化形參。這樣形參就成為實(shí)參的一個(gè)別名,對(duì)形參的任何操作也就直接作用于實(shí)參。
?
3-4 什么叫內(nèi)聯(lián)函數(shù)?它有哪些特點(diǎn)?
?
解:
定義時(shí)使用關(guān)鍵字 inline的函數(shù)叫做內(nèi)聯(lián)函數(shù);
編譯器在編譯時(shí)在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開(kāi)銷(xiāo);
內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語(yǔ)句和switch語(yǔ)句;
內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前;
對(duì)內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明;
?
3-5 函數(shù)原型中的參數(shù)名與函數(shù)定義中的參數(shù)名以及函數(shù)調(diào)用中的參數(shù)名必須一致嗎?
?
解:
不必一致,所有的參數(shù)是根據(jù)位置和類(lèi)型而不是名字來(lái)區(qū)分的。
3-6 重載函數(shù)時(shí)通過(guò)什么來(lái)區(qū)分?
?
解:
重載的函數(shù)的函數(shù)名是相同的,但它們的參數(shù)的個(gè)數(shù)和數(shù)據(jù)類(lèi)型不同,編譯器根據(jù)實(shí)參和形參的類(lèi)型及個(gè)數(shù)的最佳匹配,自動(dòng)確定調(diào)用哪一個(gè)函數(shù)。
3-7 編寫(xiě)函數(shù),參數(shù)為兩個(gè)unsigned short int型數(shù),返回值為第一個(gè)參數(shù)除以第二個(gè)參數(shù)的結(jié)果,數(shù)據(jù)類(lèi)型為short
int;如果第二個(gè)參數(shù)為0,則返回值為-1。在主程序中實(shí)現(xiàn)輸入輸出。
?
解:
源程序:
#include <iostream.h>
short int Divider(unsigned short int a, unsigned short int b)
{
if (b == 0)
return -1;
else
return a/b;
}
typedef unsigned short int USHORT;
typedef unsigned long int ULONG;
int main()
{
USHORT one, two;
short int answer;
cout << "Enter two numbers.\n Number one: ";
cin >> one;
cout << "Number two: ";
cin >> two;
answer = Divider(one, two);
if (answer > -1)
cout << "Answer: " << answer;
else
cout << "Error, can't divide by zero!";
return 0;
}
程序運(yùn)行輸出:
Enter two numbers.
Number one:8
Number two:2
Answer: 4
?
3-8 編寫(xiě)函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度,公式為:C = (F - 32) * 5/9; 在主程序中提示用戶(hù)輸入一個(gè)華氏溫度,轉(zhuǎn)化后輸出相應(yīng)的攝氏溫度。
?
解:
源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)三
?
3-9 編寫(xiě)函數(shù)判斷一個(gè)數(shù)是否是質(zhì)數(shù),在主程序中實(shí)現(xiàn)輸入、輸出。
?
解:
#include <iostream.h>
#include <math.h>
int prime(int i); //判一個(gè)數(shù)是否是質(zhì)數(shù)的函數(shù)
void main()
{
int i;
cout << "請(qǐng)輸入一個(gè)整數(shù):";
cin >> i;
if (prime(i))
cout << i << "是質(zhì)數(shù)." << endl;
else
cout << i << "不是質(zhì)數(shù)." << endl;
}
int prime(int i)
{
int j,k,flag;
flag = 1;
k = sqrt(i);
for (j = 2; j <= k; j++)
{
if(i%j == 0)
{
flag = 0;
break;
}
}
if (flag)
return 1;
else
return 0;
}
程序運(yùn)行輸出:
請(qǐng)輸入一個(gè)整數(shù):1151
1151是質(zhì)數(shù).
3-10 編寫(xiě)函數(shù)求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)。
?
解:
源程序:
#include <iostream.h>
#include <math.h>
int fn1(int i,int j); //求最大公約數(shù)的函數(shù)
void main()
{
int i,j,x,y;
cout << "請(qǐng)輸入一個(gè)正整數(shù):";
cin >> i ;
cout << "請(qǐng)輸入另一個(gè)正整數(shù):";
cin >> j ;
?
x = fn1(i,j);
y = i * j / x;
cout << i << "和" << j << "的最大公約數(shù)是:" << x << endl;
cout << i << "和" << j << "的最小公倍數(shù)是:" << y << endl;
}
int fn1(int i, int j)
{
int temp;
if (i < j)
{
temp = i;
i = j;
j = i;
}
while(j != 0)
{
temp = i % j;
i = j;
j = temp;
}
return i;
}
程序運(yùn)行輸出:
請(qǐng)輸入一個(gè)正整數(shù):120
請(qǐng)輸入另一個(gè)正整數(shù):72
120和72的最大公約數(shù)是:24
120和72的最小公倍數(shù)是:360
?
3-11 什么叫作嵌套調(diào)用?什么叫作遞歸調(diào)用?
?
解:
函數(shù)允許嵌套調(diào)用,如果函數(shù)1調(diào)用了函數(shù)2,函數(shù)2再調(diào)用函數(shù)3,便形成了函數(shù)的嵌套調(diào)用。
函數(shù)可以直接或間接地調(diào)用自身,稱(chēng)為遞歸調(diào)用。
?
3-12 在主程序中提示輸入整數(shù)n,編寫(xiě)函數(shù)用遞歸的方法求1 + 2 + … + n的值。
?
解:
#include <iostream.h>
#include <math.h>
int fn1(int i);
void main()
{
int i;
cout << "請(qǐng)輸入一個(gè)正整數(shù):";
cin >> i ;
?
cout << "從1累加到" <<i << "的和為:" << fn1(i) << endl;
}
int fn1(int i)
{
if (i == 1)
return 1;
else
return i + fn1(i -1);
}
程序運(yùn)行輸出:
請(qǐng)輸入一個(gè)正整數(shù):100
從1累加到100的和為:5050
?
3-13 編寫(xiě)遞歸函數(shù)GetPower(int x, int y)計(jì)算x的y次冪, 在主程序中實(shí)現(xiàn)輸入輸出。
?
解:
源程序:
#include <iostream.h>
long GetPower(int x, int y);
int main()
{
int number, power;
long answer;
cout << "Enter a number: ";
cin >> number;
cout << "To what power? ";
cin >> power;
answer = GetPower(number,power);
cout << number << " to the " << power << "th power is " <<answer << endl;
return 0;
}
long GetPower(int x, int y)
{
if(y == 1)
return x;
else
return (x * GetPower(x,y-1));
}
程序運(yùn)行輸出:
Enter a number: 3
To what power? 4
3 to the 4th power is 81
?
3-14 用遞歸的方法編寫(xiě)函數(shù)求Fibonacci 級(jí)數(shù),公式為fib(n) = fib(n-1) + fib(n-2),n>2;
fib(1) = fib(2) = 1;觀察遞歸調(diào)用的過(guò)程。
?
解:
源程序見(jiàn)"實(shí)驗(yàn)指導(dǎo)"部分實(shí)驗(yàn)三
?
3-15 用遞歸的方法編寫(xiě)函數(shù)求n階勒讓德多項(xiàng)式的值,在主程序中實(shí)現(xiàn)輸入、輸出;
?
解:
#include <iostream.h>
float p(int n, int x);
void main()
{
int n,x;
cout << "請(qǐng)輸入正整數(shù)n:";
cin >> n;
cout << "請(qǐng)輸入正整數(shù)x:";
cin >> x;
?
cout << "n = " << n << endl;
cout << "x = " << x << endl;
cout << "P" << n << "(" << x << ") = " << p(n,x) << endl;
}
float p(int n, int x)
{
if (n == 0)
return 1;
else if (n == 1)
return x;
else
return ((2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x)) /n ;
}
程序運(yùn)行輸出:
請(qǐng)輸入正整數(shù)n:1
請(qǐng)輸入正整數(shù)x:2
n = 1
x = 2
P1(2) = 2
請(qǐng)輸入正整數(shù)n:3
請(qǐng)輸入正整數(shù)x:4
n = 3
x = 4
P3(4) = 154
?
3-16 使用模板函數(shù)實(shí)現(xiàn)Swap( x, y ),函數(shù)功能為交換x、y的值。
?
解:
源程序:
#include <iostream.h>
template <typename T> void swap(T &x, T &y)
{
T z;
z = x;
x = y;
y = z;
}
void main()
{
int j = 1, k = 2;
double v = 3.0, w = 4.0;
cout << "j = " <<j << " k = " << k << endl;
cout << "v = " <<v << " w = " << w << endl;
swap(j, k); //int
swap(v, w); //double
cout << "After swap:" << endl;
cout << "j = " <<j << " k = " << k << endl;
cout << "v = " <<v << " w = " << w << endl;
}
程序運(yùn)行輸出:
j = 1 k = 2
v = 3.14 w = 4.35
After swap:
j = 2 k = 1
v = 4.35 w = 3.14
?
?
第 四 章 ? ? 類(lèi)
?
4-1 解釋public和private的作用,公有類(lèi)型成員與私有類(lèi)型成員有些什么區(qū)別?
?
解:
公有類(lèi)型成員用public關(guān)鍵字聲明,公有類(lèi)型定義了類(lèi)的外部接口;私有類(lèi)型的成員用private關(guān)鍵字聲明,只允許本類(lèi)的函數(shù)成員來(lái)訪問(wèn),而類(lèi)外部的任何訪問(wèn)都是非法的,這樣,私有的成員就整個(gè)隱蔽在類(lèi)中,在類(lèi)的外部根本就無(wú)法看到,實(shí)現(xiàn)了訪問(wèn)權(quán)限的有效控制。
?
4-2 protected關(guān)鍵字有何作用?
?
解:
protected用來(lái)聲明保護(hù)類(lèi)型的成員,保護(hù)類(lèi)型的性質(zhì)和私有類(lèi)型的性質(zhì)相似,其差別在于繼承和派生時(shí)派生類(lèi)的成員函數(shù)可以訪問(wèn)基類(lèi)的保護(hù)成員。
?
4-3 構(gòu)造函數(shù)和析構(gòu)函數(shù)有什么作用?
?
解:
構(gòu)造函數(shù)的作用就是在對(duì)象被創(chuàng)建時(shí)利用特定的值構(gòu)造對(duì)象,將對(duì)象初始化為一個(gè)特定的狀態(tài),使此對(duì)象具有區(qū)別于彼對(duì)象的特征,完成的就是是一個(gè)從一般到具體的過(guò)程,構(gòu)造函數(shù)在對(duì)象創(chuàng)建的時(shí)候由系統(tǒng)自動(dòng)調(diào)用。
析構(gòu)函數(shù)與構(gòu)造函數(shù)的作用幾乎正好相反,它是用來(lái)完成對(duì)象被刪除前的一些清理工作,也就是專(zhuān)門(mén)作掃尾工作的。一般情況下,析構(gòu)函數(shù)是在對(duì)象的生存期即將結(jié)束的時(shí)刻由系統(tǒng)自動(dòng)調(diào)用的,它的調(diào)用完成之后,對(duì)象也就消失了,相應(yīng)的內(nèi)存空間也被釋放。
?
4-4 數(shù)據(jù)成員可以為公有的嗎?成員函數(shù)可以為私有的嗎?
?
解:
可以,二者都是合法的。數(shù)據(jù)成員和成員函數(shù)都可以為公有或私有的。但數(shù)據(jù)成員最好定義為私有的。
?
4-5 已知class A中有數(shù)據(jù)成員int a,如果定義了A的兩個(gè)對(duì)象A1、A2,它們各自的數(shù)據(jù)成員a的值可以不同嗎?
?
解:
可以,類(lèi)的每一個(gè)對(duì)象都有自己的數(shù)據(jù)成員。
4-6 什么叫做拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用?
?
解:
拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,其形參是本類(lèi)的對(duì)象的引用,其作用是使用一個(gè)已經(jīng)存在的對(duì)象,去初始化一個(gè)新的同類(lèi)的對(duì)象。在以下三種情況下會(huì)被調(diào)用:在當(dāng)用類(lèi)的一個(gè)對(duì)象去初始化該類(lèi)的另一個(gè)對(duì)象時(shí);如果函數(shù)的形參是類(lèi)對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí);如果函數(shù)的返回值是類(lèi)對(duì)象,函數(shù)調(diào)用完成返回時(shí);
?
4-7 拷貝構(gòu)造函數(shù)與賦值運(yùn)算符(=)有何不同?
?
解:
賦值運(yùn)算符(=)作用于一個(gè)已存在的對(duì)象;而拷貝構(gòu)造函數(shù)會(huì)創(chuàng)建一個(gè)新的對(duì)象。
?
4-8 定義一個(gè)Dog 類(lèi),包含的age、weight等屬性,以及對(duì)這些屬性操作的方法。實(shí)現(xiàn)并測(cè)試這個(gè)類(lèi)。
?
解:
源程序:
#include <iostream.h>
class Dog
{
public:
Dog (int initialAge = 0, int initialWeight = 5);
~Dog();
int GetAge() { return itsAge;} // inline!
void SetAge (int age) { itsAge = age;} // inline!
int GetWeight() { return itsWeight;} // inline!
void SetWeight (int weight) { itsAge = weight;} // inline!
private:
int itsAge, itsWeight;
};
Dog::Dog(int initialAge, int initialWeight)
{
itsAge = initialAge;
itsWeight = initialWeight;
}
Dog::~Dog() //destructor, takes no action
{
}
int main()
{
Dog Jack(2,10);
cout << "Jack is a Dog who is " ;
cout << Jack.GetAge() << " years old and";
cout << Jack.GetWeight() << " pounds weight.\n";
Jack.SetAge(7);
Jack.SetWeight(20);
cout << "Now Jack is " ;
cout << Jack.GetAge() << " years old and";
cout << Jack.GetWeight() << " pounds weight.";
?
return 0;
}
程序運(yùn)行輸出:
Jack is a Dog who is 2 years old and 10 pounds weight.
Now Jack is 7 years old 20 pounds weight.
?
4-9 設(shè)計(jì)并測(cè)試一個(gè)名為Rectangle的矩形類(lèi),其屬性為矩形的左下角與右上角兩個(gè)點(diǎn)的坐標(biāo),能計(jì)算矩形的面積。
?
解:
源程序:
#include <iostream.h>
class Rectangle
{
public:
Rectangle (int top, int left, int bottom, int right);
~Rectangle () {}
int GetTop() const { return itsTop; }
int GetLeft() const { return itsLeft; }
int GetBottom() const { return itsBottom; }
int GetRight() const { return itsRight; }
void SetTop(int top) { itsTop = top; }
void SetLeft (int left) { itsLeft = left; }
void SetBottom (int bottom) { itsBottom = bottom; }
void SetRight (int right) { itsRight = right; }
int GetArea() const;
private:
int itsTop;
int itsLeft;
int itsBottom;
int itsRight;
};
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
itsTop = top;
itsLeft = left;
itsBottom = bottom;
itsRight = right;
}
int Rectangle::GetArea() const
{
int Width = itsRight-itsLeft;
int Height = itsTop - itsBottom;
return (Width * Height);
}
int main()
{
Rectangle MyRectangle (100, 20, 50, 80 );
int Area = MyRectangle.GetArea();
cout << "Area: " << Area << "\n";
return 0;
}
程序運(yùn)行輸出:
Area: 3000
Upper Left X Coordinate: 20
?
4-10
設(shè)計(jì)一個(gè)用于人事管理的People(人員)類(lèi)??紤]到通用性,這里只抽象出所有類(lèi)型人員都具有的屬性:number(編號(hào))、sex(性別)、birthday(出生日期)、id(身份證號(hào))等等。其中"出生日期"定義為一個(gè)"日期"類(lèi)內(nèi)嵌子對(duì)象。用成員函數(shù)實(shí)現(xiàn)對(duì)人員信息的錄入和顯示。要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、帶缺省形參值的成員函數(shù)、聚集。
?
解:
本題用作實(shí)驗(yàn)四的選做題,因此不給出答案。
?
4-11 定義一個(gè)矩形類(lèi),有長(zhǎng)、寬兩個(gè)屬性,有成員函數(shù)計(jì)算矩形的面積
?
解:
#include <iostream.h>
class Rectangle
{
public:
Rectangle(float len, float width)
{
Length = len;
Width = width;
}
~Rectangle(){};
float GetArea() { return Length * Width; }
float GetLength() { return Length; }
float GetWidth() { return Width; }
private:
float Length;
float Width;
};
void main()
{
float length, width;
cout << "請(qǐng)輸入矩形的長(zhǎng)度:";
cin >> length;
cout << "請(qǐng)輸入矩形的寬度:";
cin >> width;
Rectangle r(length, width);
cout << "長(zhǎng)為" << length << "寬為" << width << "的矩形的面積為:"
<< r.GetArea () << endl;
}
程序運(yùn)行輸出:
請(qǐng)輸入矩形的長(zhǎng)度:5
請(qǐng)輸入矩形的寬度:4
長(zhǎng)為5寬為4的矩形的面積為:20
?
?
/*4-11-2 已有點(diǎn)類(lèi)Point定義,定義一個(gè)矩形類(lèi),有左下角,右上角兩個(gè)點(diǎn),面積,周長(zhǎng)屬性,面積,周長(zhǎng)由左下角,右上角兩個(gè)點(diǎn)決定;有成員函數(shù)有(1)構(gòu)造函數(shù)(2)返回矩形的面積(3)返回周長(zhǎng)
(提示:用類(lèi)組合實(shí)現(xiàn))
?
解:
*/
#include <iostream.h>
class Point
{
?? public:
?????? ? ?Point(int xx=0,int yy=0){X=xx; Y=yy;}//構(gòu)造函數(shù)
?????? ?? Point(Point&? p);
?????? ?? int GetX() {return X;}
?????? ?? int GetY() {return Y;}
?? private:
?????? ?? int? X,Y;
};
Point::Point (Point& p)
{ X=p.X;
Y=p.Y;
//cout<<"拷貝構(gòu)造函數(shù)被調(diào)用"<<endl;
}
?
class Rectangle
{public:
Rectangle(Point xp1, Point xp2);//構(gòu)造函數(shù)
Rectangle(Rectangle &);//拷貝構(gòu)造函數(shù)
float getarea(){return area;}
float getlen(){return len;}
private:
Point p1,p2;
float area,len;
};
?
Rectangle::Rectangle(Point xp1,Point xp2):p1(xp1),p2(xp2)
{ float h=p2.GetY()-p1.GetY();
? float w=p2.GetX()-p1.GetX();
? area=h*w;
? len=2*(h+w);
}
Rectangle::Rectangle(Rectangle &Rect):p1(Rect.p1),p2(Rect.p2)
{ area=Rect.area;
? len=Rect.len;
}
void main()
{
?????? int x,y;
?????? cout << "請(qǐng)輸入矩形的左下角點(diǎn)坐標(biāo)p1的x y坐標(biāo):";
?????? cin >> x>>y;? Point myp1(x,y);
?????? cout << "請(qǐng)輸入矩形的右上角點(diǎn)坐標(biāo)p2的x y坐標(biāo):";
?????? cin >> x>>y;? Point myp2(x,y);
?????? Rectangle Rect1(myp1, myp2);
?????? Rectangle Rect2(Rect1);
??????
?????? cout << "第一個(gè)矩形的面積為:" << Rect1.getarea() << "? 周長(zhǎng)為:" << Rect1.getlen()<<endl;
?????? cout << "第二個(gè)矩形的面積為:" << Rect2.getarea() << "? 周長(zhǎng)為:" << Rect2.getlen()<<endl;
}
?
?
?
4-12 定義一個(gè)"數(shù)據(jù)類(lèi)型" datatype類(lèi),能處理包含字符型、整型、浮點(diǎn)型三種類(lèi)型的數(shù)據(jù),給出其構(gòu)造函數(shù)。
?
解:
#include <iostream.h>
class datatype{
enum{
character,
integer,
floating_point
} vartype;
union
{
char c;
int i;
float f;
};
public:
datatype(char ch) {
vartype = character;
c = ch;
}
datatype(int ii) {
vartype = integer;
i = ii;
}
datatype(float ff) {
vartype = floating_point;
f = ff;
}
void print();
};
void datatype::print() {
switch (vartype) {
case character:
cout << "字符型: " << c << endl;
break;
case integer:
cout << "整型: " << i << endl;
break;
case floating_point:
cout << "浮點(diǎn)型: " << f << endl;
break;
}
}
void main() {
datatype A('c'), B(12), C(1.44F);
A.print();
B.print();
C.print();
}
程序運(yùn)行輸出:
字符型: c
整型: 12
浮點(diǎn)型: 1.44
?
4-13 定義一個(gè)Circle類(lèi),有數(shù)據(jù)成員半徑Radius,成員函數(shù)GetArea(),計(jì)算圓的面積,構(gòu)造一個(gè)Circle的對(duì)象進(jìn)行測(cè)試。
?
解:
#include <iostream.h>
class Circle
{
public:
Circle(float radius){ Radius = radius;}
~Circle(){}
float GetArea() { return 3.14 * Radius * Radius; }
private:
float Radius;
};
void main()
{
float radius;
cout << "請(qǐng)輸入圓的半徑:";
cin >> radius;
Circle p(radius);
cout << "半徑為" << radius << "的圓的面積為:" << p.GetArea ()
<< endl;
}
程序運(yùn)行輸出:
請(qǐng)輸入圓的半徑:5
半徑為5的圓的面積為:78.5
?
4-14 定義一個(gè)tree類(lèi),有成員ages,成員函數(shù)grow(int years)對(duì)ages加上years,age()顯示tree對(duì)象的ages的值。
?
解:
#include <iostream.h>
class Tree {
int ages;
public:
Tree(int n=0);
~Tree();
void grow(int years);
void age();
};
Tree::Tree(int n) {
ages = n;
}
Tree::~Tree() {
age();
}
void Tree::grow(int years) {
ages += years;
}
void Tree::age() {
cout << "這棵樹(shù)的年齡為" << ages << endl;
}
void main()
{
Tree t(12);
?
t.age();
t.grow(4);
}
?
程序運(yùn)行輸出:
這棵樹(shù)的年齡為12
這棵樹(shù)的年齡為16