案例一、
請設計一個 Person 類,Person 類具有 name 和 age 屬性,提供初始化函數 (Init),並提供對 name 和 age 的讀寫函數(set,get),但必須確保 age 的賦值在有 效範圍內(0-100),超出有效範圍,則拒絕賦值,並提供方法輸出姓名和年齡.
#include <iostream>
#include <string.h>
using namespace std;
class Person
{
private://私有數據
char m_name[32];//定義時候不要初始化
int m_age;
public://公有函數
//初始化函數
void initPerson(char *name, int age)
{
strcpy(m_name,name);
m_age = age;
}
//對m_name進行寫操作
void setName(char *name)
{
strcpy(m_name,name);
}
//對m_name進行讀操作
char *getName(void)
{
return m_name;
}
//對m_name進行寫操作
void setAge(int age)
{
if(age>0 && age<100)
m_age = age;
else
cout << "無效"<<endl;
}
//對m_name進行讀操作
int getAge(void)
{
return m_age;
}
//遍歷數據
void showPerson(void)
{
cout <<"姓名:"<<m_name<<" 年齡:"<<m_age<<endl;
}
};
int main(int argc, char *argv[])
{
Person pee;//通過類,實例化一個對象
pee.initPerson("bbb",20);//初始化一個對象
cout << "姓名:"<<pee.getName()<<endl;
cout <<"年齡" << pee.getAge()<<endl;
pee.showPerson();//遍歷
pee.setName("ccc");//寫一個名字
pee.setAge(19);//寫一個年齡
cout << "姓名:"<<pee.getName()<<endl;
cout <<"年齡" << pee.getAge()<<endl;
pee.showPerson();
return 0;
}
運行結果:
案例二、設計立方體類
設計立方體類(Cube),求出立方體的面積( 2ab + 2ac + 2bc )和體積( a * b * c),分別 用全局函數和成員函數判斷兩個立方體是否相等。
#include <iostream>
using namespace std;
class Cub
{
private:
int m_l;
int m_w;
int m_h;
public:
void setL(int l)//長
{
m_l = l;
}
void setW(int w)//寬
{
m_w = w;
}
void setH(int h)//高
{
m_h = h;
}
int getL(void)
{
return m_l;
}
int getW(void)
{
return m_w;
}
int getH(void)
{
return m_h;
}
//計算面積
int gets()
{
return 2*(m_l*m_w+m_l*m_h+m_h*m_w);
}
//計算體積
int getc()
{
return m_l*m_w*m_h;
}
//局部比較函數
bool conparecub2(Cub &ob)
{
if(m_l == ob.m_l && m_h == ob.m_h && m_w == ob.m_w)
return true;
else
return false;
}
};
//全局比較 函數
bool comparecub1(Cub &cub1,Cub &cub2)//用引用的好處:傳參數,節省空間
{
if(cub1.getL()==cub2.getL() && cub1.getH()==cub2.getH() && cub1.getW()==cub2.getW())
return true;
else
return false;
}
int main(int argc, char *argv[])
{
Cub cub1;
cub1.setL(10);
cub1.setW(10);
cub1.setH(10);
//計算面積
cout << "cub1的面積" <<cub1.gets() << endl;
//計算體積
cout << "cub1的體積" <<cub1.getc() <<endl;
Cub cub2;
cub2.setL(10);
cub2.setW(10);
cub2.setH(10);
//全局比較
if(comparecub1(cub1,cub2)==true)
{
cout << "相等" << endl;
}
else
{
cout << "不相等" <<endl;
}
Cub cub3;
cub3.setL(10);
cub3.setW(20);
cub3.setH(10);
//局部比較
if(cub3.conparecub2(cub1)==true)
cout << "相等" << endl;
else
cout <<"不相等"<<endl;
return 0;
}
運行結果:
案例三、點和圓的關係
設計一個圓形類(AdvCircle),和一個點類(Point),計算點和圓的關係。 假如 圓心座標爲 x0, y0, 半徑爲 r,點的座標爲 x1, y1: 1)點在圓上:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) == rr 2)點在圓內:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) < rr 3)點在圓 外:(x1-x0)(x1-x0) + (y1-y0)(y1-y0) > r*r
#include <iostream>
using namespace std;
class Point//設計點的類
{
private:
int m_x;
int m_y;
public:
void setX(int x=0)
{
m_x = x;
}
void setY(int y=0)
{
m_y = y;
}
int getX(void)
{
return m_x;
}
int getY(void)
{
return m_y;
}
};
class Circle//設計圓的類
{
private:
Point m_p;
int m_r;
public:
void setR(int r)
{
m_r = r;
}
int getR(void)
{
return m_r;
}
//設置圓心
void setPoint(int x,int y)
{
m_p.setX(x);
m_p.setY(y);
}
Point getPoint(void)
{
return m_p;
}
//判斷點與圓的關係
void compareCircle(Point &ob)
{
int distance =(ob.getX()-m_p.getX())*(ob.getX()-m_p.getX())+(ob.getY()-m_p.getY())*(ob.getY()-m_p.getY());
if( distance >( m_r*m_r ))
cout << "點在圓外"<<endl;
else if( distance ==( m_r*m_r ))
cout << "點在圓上"<<endl;
else
cout << "點在圓內"<<endl;
}
};
int main(int argc, char *argv[])
{
//實例化一個點
Point point;
point.setX(15);
point.setY(15);
//實例化一個圓的對象
Circle circle;
circle.setR(10);
circle.setPoint(20,20);
//判斷點與圓的關係
circle.compareCircle(point);
return 0;
}
運行結果: