C++程序设计-第7周 静态成员、友元、类模板
来源:互联网 发布:百度推广软件如何使用 编辑:程序博客网 时间:2024/05/16 05:45
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
第一部分 阅读程序 要阅读的程序中存在语法错误,请将其找出来,能用自己的话说清梦理由
#include <iostream>#include <string>using namespace std;class Box{ public: Box(int h,int w,int l):height(h),width(w),length(l){} int volume( ){return height*width*length;}; private: static int height; //静态的数据成员 int width; int length;};int main(){ Box b(2,3,4); cout<<"volume is "<<b.volume()<<endl; return 0;}
第二部分 上机实践
【项目1-静态成员应用】设计含有静态数据成员和成员函数的Time类:静态数据成员类中所有的对象共有的数据
class Time{public:Time(int=0,int=0,int=0);void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pmvoid add_seconds(int); //增加n秒钟void add_minutes(int); //增加n分钟 void add_hours(int); //增加n小时 static void change24(); //改变静态成员is_24,在12和24时制之间转换static void changefrom0(); //改变静态成员from0,切换是否前导0 private:static bool is_24; //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5 pm static bool from0; //为true时,前导0,8:23:5显示为08:23:05int hour;int minute;int sec;};//下面写出静态成员的初始化及各成员函数的定义……int main( ) //运行结果如图所示{ }
【项目2-成员函数、友元函数和一般函数之区别】阅读下面的程序,仔细阅读注释。然后模仿完成求点类中距离的任务。
//例:使用成员函数、友元函数和一般函数的区别#include <iostream>using namespace std;class Time{public:Time(int h,int m,int s):hour(h),minute(m),sec(s){}void display1(); //成员函数声明friend void display2(Time &); //友元函数声明int getHour(){return hour;}int getMinute(){return minute;}int getSec(){return sec;} private:int hour;int minute;int sec;};void display3(Time &); //一般函数声明void Time::display1() //成员函数的实现,dispaly1前加Time::{//以hour形式直接访问私有数据成员,实质是this->hour形式cout<<hour<<":"<<minute<<":"<<sec<<endl;}void display2(Time &t) //友元函数的实现,dispaly2前不加Time::,并不是类的成员函数{//不是类的成员函数,却可以t.hour的形式直接访问私有数据成员——友元cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}void display3(Time &t) //一般函数的实现,dispaly1前加Time::{//不能直接访问,只能用公共接口t.getHour()形式访问私有数据成员cout<<t.getHour()<<":"<<t.getMinute()<<":"<<t.getSec()<<endl;}int main(){Time t1(10,13,56);t1.display1(); //成员函数这样调用display2(t1); //友员函数的调用和一般函数无异display3(t1); //一般函数的调用system("pause");return 0;}
你需要完成的任务是,利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数,并设计main()函数完成测试。此项目和例子的区别在于“距离是一个点和另外一个点的距离”,参数个数上有体现。下面是点类的部分代码。
class CPoint {private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0):x(xx),y(yy){} ……//请继续写需要的代码};
【项目3-友元类】定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期、时间都处理更好)
class Date; //对Date类的提前引用声明class Time{public: Time(int,int,int); void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年 void display(Date &); //显示时间,格式:月/日/年 时:分:秒private: int hour; int minute; int sec;};class Date{public: Date(int,int,int); friend class Time; //Time为Date的友元类private: int month; int day; int year;};int main( ){ Time t1(23,59,32); Date d1(12,25,2012); for(int i=0; i<=80; i++) { t1.add_a_second(d1); t1.display(d1); } return 0;}//下面定义两个类中的成员函数,要求不得再增加成员函数//注意体会在Time的成员函数中可以调用Date类的私有数据成员
【项目4-复数模板类】阅读P314的例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型。
(1)要求类成员函数在类外定义。
(2)在此基础上,再实现减法、乘法和除法
你可以使用的main()函数如下。
int main( ){Complex<int> c1(3,4),c2(5,-10),c3; c3=c1.complex_add(c2); cout<<"c1+c2="; c3.display( ); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; c6=c4.complex_add(c5); cout<<"c4+c5="; c6.display( ); //下面测试减法、乘法和除法 ……system("pause");return 0;}
【项目5-模板类中使用友元函数】友元函数提供了一种非成员函数访问私有数据成员的途径,模板类使类中的数据成员的类型变得灵活,这两种技术可以结合起来用。要求在项目4的基础上能够支持用友员函数实现的加法。用于测试的main()函数如下:
int main( ){Complex<int> c1(3,4),c2(5,-10),c3; c3=c1.complex_add(c2); //需要在模板类中有一个成员函数支持加法运算,有一个形参cout<<"c1+c2="; c3.display( ); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; c6=c4.complex_add(c5); cout<<"c4+c5="; c6.display( ); Complex<int> c7;c7=add_complex(c1,c2); //需要在模板类中有一个友员函数支持加法运算,有两个形参cout<<"c1+c2="; c7.display( );system("pause");return 0;}
- C++程序设计-第7周 静态成员、友元、类模板
- 静态成员,友元,模板
- 第2.5节:静态成员和友元函数(C++)
- c++程序设计 类+ 静态成员与函数+友元
- 【C++】友元与静态成员
- 友元 函数/类 ;静态成员 及 静态成员函数
- 对象的赋值与复制,静态成员 友元 类模板
- 第7周项目5友元模板类
- 类中静态成员与友元
- 第7周,,静态成员
- 2013级C++第7周(春)项目——深复制、友元、模板 【项目3-成员函数、友元函数和一般函数有区别】
- 静态成员与友元
- C++/Java__中类模板中的静态成员变量和静态成员函数
- 第6周项目6--复数模板类-友元
- 2013级C++第7周(春)项目——深复制、友元、模板 【项目2-体验常成员函数】
- 第7周项目一-静态成员应用 时间类
- 第7周使用静态成员
- 第7周静态成员Time
- drawRect()
- int型x、y,检验x+y,x-y,x*y是否溢出,没溢出返回1
- Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?
- 接口的实际应用--代理设计模式
- 寄存器和常用汇编指令
- C++程序设计-第7周 静态成员、友元、类模板
- 数据库的垂直切分和水平切分
- javascript将秒数转换为时分秒格式
- 接口的实际应用--适配器模式
- 在ActionBar中进行Fragment之间的切换
- 3.LinkedList
- 第五次课堂作业
- 关于struts2 list <s:if/>
- 匈牙利算法