2013级C++第6周(春)项目——对象指针、const

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答

  推荐“玻璃罩const”系列的三篇文章(http://blog.csdn.net/sxhelijian/article/details/7385683),掌握利用const完成数据保护。
  1. 使用常对象——为共用数据加装一个名为const的玻璃罩;
  2. 常(const)+ 对象 + 指针:玻璃罩到底保护哪一个;
  3. 对象更有用的玻璃罩——常引用
  

第一部分 阅读程序

  阅读程序,可以在上机时通过单步执行进一步和你在人脑中运行程序的过程进行对照。
  a.阅读程序,写出程序的运行结果并理解

#include <iostream>
using namespace std;
class base
{
private:
    int m;
public:
    base() {};
    base(int a)
    {
        m=a;
    }
    int get()
    {
        return m;
    }
    void set(int a)
    {
        m=a;
    }
};//base_end

int main()
{
    base *ptr;
    ptr=new base[2];
    ptr->set(30);
    ptr=ptr+1;
    ptr->set(50);
    base a[2]= {1,9};
    cout<<a[0].get()<<","<<a[1].get()<<endl;
    cout<<ptr->get()<<",";
    ptr=ptr-1;
    cout<<ptr->get()<<endl;
    delete[] ptr;
    return 0;
}

  b.阅读程序,写出程序的运行结果并理解

#include<iostream>
using namespace std;
class CE
{
private:
    int a,b;
    int getmin()
    {
        return (a<b? a:b);
    }
public:
    int c;
    void SetValue(int x1,int x2, int x3)
    {
        a=x1;
        b=x2;
        c=x3;
    }
    int GetMin();
};
int CE::GetMin()
{
    int d=getmin();
    return (d<c? d:c);
}
int main()
{
    int x=5,y=12,z=8;
    CE *ep;
    ep=new CE;
    ep->SetValue(x+y,y-z,10);
    cout<<ep->GetMin()<<endl;
    CE a=*ep;
    cout<<a.GetMin()*3+15<<endl;
    return 0;
}

  c. 阅读程序,写出程序的运行结果并理解

#include <iostream>
using namespace std;
class Time
{
public:
    Time(int,int,int);
    void output_time( );
    int hour;
    int minute;
    int sec;
};

Time::Time(int h,int m,int s)
{
    hour=h;
    minute=m;
    sec=s;
}
void Time::output_time( )
{
    cout<<hour<<":";
    cout<<minute<<":" <<sec<<endl;
}
int main( )
{
    Time t1(10,13,56);
    int *p1=&t1.hour; //指向数据成员的指针
    cout<<*p1<<endl;
    t1.output_time( );

    Time *p2=&t1; //指向对象的指针
    p2->output_time( );

    void (Time::*p3)( ); //指向成员函数的指针
    p3=&Time::output_time;
    (t1.*p3)( );
    return 0;
}   

  d. 请写出程序中注释下面const出现的语法现象名及其所起的作用

#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student() {}
    Student( const string& nm, int sc = 0 ): name( nm ), score( sc ) {}
    //(1)_______________________________
    void set_student( const string& nm, int sc = 0 )
    {
        name = nm;
        score = sc;
    }
    //(2)_________________________________
    const string& get_name() const
    {
        return name;
    }
    int get_score() const
    {
        return score;
    }
private:
    string name;
    int score;
};
//(3)_________________________________
void output_student(const Student& student )
{
    cout << student.get_name() << "\t";
    cout << student.get_score() << endl;
}
int main()
{
    Student stu( "Wang", 85 );
    output_student( stu );
    return 0;
}

第二部分 实践项目

【项目1-体验常成员函数】
  设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改。

class CPoint
{
private:
  double x;  // 横坐标
  double y;  // 纵坐标
public:
  CPoint(double xx=0,double yy=0);
  double Distance1(CPoint p) const;   // 两点之间的距离(一点是当前点,另一点为参数p)
  double Distance0() const;            // 到原点的距离
  CPoint SymmetricAxis(char style) const;//style取'x','y'和'o'分别表示按x轴, y轴, 原点对称
  void input();  //以x,y 形式输入坐标点
  void output(); //以(x,y) 形式输出坐标点
};

【项目2 - 对象作为数据成员】
  回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类。通过这种方式,将某些类组合到另外的类中,当作其中的一个“部件”使用。
  本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
  提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。

class CTriangle
{
public:
  CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数
  void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//
  float perimeter(void);//计算三角形的周长
  float area(void);//计算并返回三角形的面积
  bool isRightTriangle(); //是否为直角三角形
  bool isIsoscelesTriangle(); //是否为等腰三角形
private:
  CPoint A,B,C; //三顶点
};

【项目3-用多文件组织多个类的程序】
  将项目2用“一个项目多个文件”的方式实现,其中两个类的声明放在同一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。

【项目4-静态成员应用】
  设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。

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 pm
	void 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:05
	int hour;
	int minute;
	int sec;
};
//下面写出静态成员的初始化及各成员函数的定义……
int main( )
{  }
china-pub | 亚马逊 | 京东
当当  | 豆瓣 
图灵社区  官方样章下载
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新)  ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-12-28 01:11:56

2013级C++第6周(春)项目——对象指针、const的相关文章

2013级C++第2周(春)项目——结构体应用大体验

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 第一部分 结构体应用 [项目1-学生成绩统计]   每位同学的信息学号.姓名.C++.高数.英语成绩,定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[12]).姓名(name).三门课的成绩(grade).总分(score).均分(average)). (1)从键盘上输入N名学生的信息(N定义为常变量

2013级C++第11周(春)项目——通过继承拥有基类的资源

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 (注:本课资料由第9周直接到第11周,因为第10周是我校春假期,全校休课.春假,实际是五一.清明.端午打包一起休息,这亲戚的做法对按周安排活动的学校更好一些.) 第一部分 程序阅读 程序阅读1:  #include<iostream> using namespace std; class A { private: int x; protect

2013级C++第8周(春)项目——运算符重载

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1]实现复数类中的运算符重载(1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r; imag=i;} Complex operator+(C

2013级C++第4周(春)项目——再和对象找感觉

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答 有网友在我的博客中,在2011级的页面上留言问:"老师,为什么有的学生写着写着就不更新了呢?"这是我常想起来的痛.我没有能够让我的弟子们开成习惯,这是要我们大家一起解决的问题. 有些同学近日的低迷,读读<大学.软件外包>可能会有启发.生命的流程走上了这条分支,就在这条分支上前行. 在BB平台恢复正常之前

2013级C++第9周(春)项目——运算符重载(二)

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生信息管理系统",找出其中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧 项目1-3直接复制第8周的代码,加入要求的运算符重载定义后,作为第9周的任务另外发博文.[项目1]在第8周项目1基础上(1)再定义一目运算符 -,-c相

2013级C++第15周(春)项目——输入输出流及文件文件操作

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1qW59HTi下载. 第一部分 阅读程序(运行程序时,由上面的链接下载源代码)1.阅读教材例13.1到例13.7的程序,根据所用到的函数在功能上的限制,自己设计输入的测试数据,运行程序.(1)与自己的期望结果相对照,理解各个函数的用法:(2)深入理解数据流类

2013级C++第12周(春)项目——成员的访问属性、多重继承

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读  1.阅读程序,分析类中成员的访问属性 #include <iostream> using namespace std; class A //A为基类 { public: void f1( ); int i; protected: void f2(); int j; private: int k; }; class B:

2013级C++第16周(春)项目——二进制文件及字符流

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 本周程序阅读及程序调试中需要的文件,请到http://pan.baidu.com/s/1i3LxmDZ下载.期末临近,为适应OJ平台及熟悉内容,请自抽时间完成OJ平台的有关练习. 第一部分 阅读程序1.仔细研读例13.16.例13.17和例13.18(见下载链接),体会二进制文件和字符串流操作的一般方法.2.阅读下面的程序,指出其功能,并对比例

2013级C++第1周(春)项目——枚举类型与结构体初步

课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759 [项目0-闲谈几点] 学习信息技术的大学生,在初接触行业,就能够进入到专业社区,有机会了解行业最新进展.享受海量资源.接触专业人士.获得实践机会,也给自己创造了一个全新.开放的展示空间,我们可以拥抱这样的机会. 与互联网相关的大学生,学习程序设计课程过程中,就同互联网亲密接触,学会驾驭,学会融入,各种观念,乃至于技术会逐渐深入.在进一步的学习过程中,博客.搜索.论坛.Em