练习2.1
为什么内置数组类型不支持数组之间的赋值支持这种操作需要什么信息
数组是从C语言中集成过来的,C语言是面向过程的语言,数据和操作是分离的。
所以不支持这种赋值操作。
练习2.2
你认为作为一等公民的数组应该支持什么操作
数组间的赋值,越界检查,字符串数组末尾自动填充结束符‘\0’,自动初始化。
练习2.3
说出下面定义的四个对象之间的区别
(a) int ival = 1024;//声明了一个int型变量,并初始化为1024
(b) int *pi = &ival;//声明了一个指向int型变量的指针,并且使用变量ival的地址来初始化
(c) int *pi2 = new int( 1024 );//动态申请了一个int型的空间,并初始化为1024,将地址赋给相同类型的指针变量pi2
(d) int *pi3 = new int[ 1024 ];//动态申请了一个int类型数组,大小1024,并把初始地址赋给指针pi3
练习2.4
下面的代码段是做什么的有什么严重错误注意指针pia 的下标操作符的用法是正
确的在3.9.2 节中我们会解释其理由
int *pi = new int( 10 );
int *pia = new int[ 10 ];
while ( *pi < 10 ) {
pia[ *pi ] = *pi;
*pi = *pi + 1;
}
//本题的错误方向是功能方面,没有实现功能,没有语法错误的代码也是无用的代码。所以从功能上修改对了就可以了。
练习2.5
C++类的关键特征是接口与实现的分离
接口是一些用户可以应用到类对象上的操作的集合
它由三部分构成这些操作的名字它们的返回值以及它们的参数表一般地这
些就是该类用户所需要知道的全部内容
私有实现包括为支持公有接口所必需的算法和数据
理想情况下即使类的接口增长了它也不用变得与以前的版本不相兼容另一方面在类的生命
周期内其实现可以自由演化
从下面选择一个抽象(指类)并为该类编写一个公共接口
(a) Matrix (c) Person (e) Pointer
(b) Boolean (d) Date (f) Point
Class Date
{
public:
Date(int year, int month, int data):m_iyear(year), m_imonth(month), m_idata(data)
{
}
        void setData(int year, int month, int data);
        Date(const Date &date)
        {
            m_iyear = ar;
            m_imonth = h;
            m_idata = date.data;
}
    private:
        int m_iyear;
        int m_imonth;
        int m_idata;
};
void Date::setData(int year, int month, int data)   
{
    m_iyear = year;
    m_imonth = month;
    m_idata = data;
};
练习2.8
一般来说类型/子类型继承关系反映了一种is-a 是一种的关系具有范围检查
功能的ArrayRC 是一种Array 一本书Book 是一种图书外借资源LibraryRentalMaterial
有声书AudioBook 是一种书Book 等等下面哪些反映出这种is-a 关系
(a)成员函数是一种(isA_kindOf)函数
(b)成员函数是一种类
(c)构造函数是一种成员函数
(d)飞机是一种交通工具
(e)摩托车是一种卡车
(f)圆形是一种几何图形//圆形不是一种几何图形?
(g)正方形是一种矩形
(h)汽车是一种飞机
(i)借阅者是一种图书馆
练习2.12
class Employees
{
    public:
        class BaseInf
        {
        public:
            char m_cgender;//员工性别
            int m_iage;//员工年龄
            int m_ilenofservice;//工龄
            string m_sname;//员工姓名
        };   
       
        void setBaseInf(char gender, int age, int lenofservice, string name)
        {
            m_baseInf.m_cgender = gender;
            m_baseInf.m_iage = age;
            m_baseInf.m_ilenofservice = lenofservice;
            m_baseInf.m_sname = name;
        }
        void getBaseInf(BaseInf &baseInf)const
        {
            m_cgender = m_baseInf
        }
        virtual void setwage(int basewage) = 0;
        const int getwage()
        {
            return  m_iwage;
        }
   
    protected:
        BaseInf m_baseInf;//基本信息
        int m_iwage;//员工工资
};
class Programmer : public Employees
{
    public:
        virtual void setwage(int basewage)
        {
            m_iwage = basewage;
            cout<<"Programmer'fun"<<endl;
        }
};
class ProjectLeader : public Programmer
{
public:
    virtual void setwage(int basewage)
    {
        m_iwage = int(basewage + basewage数组全部赋值为1 * 0.5);
        cout<<"ProjectLeader'fun"<<endl;
    }
};
练习2.13
给出下列类型声明
template <class elemType> class Array;
enum Status { ... };
typedef string *Pstring;
如果存在的话下面哪些对象的定义是错误的
(a) Array< int*& > pri( 1024 );
(b) Array< Array<int> > aai( 1024 );
(c) Array< complex< double > > acd( 1024 );
(d) Array< Status > as( 1024 );
(e) Array< Pstring > aps( 1024 );
练习 2.14
template <class elementType>
class example1
{
public:
    example1(elementType min, elementType max);
    example1(const elementType *array, int size);
    elementType& operator[](int index);
    bool operator==(const example1& ) const;
    bool insert(const elementType*, int);
    bool insert( elementType );
    elementType min() const { return _min; };
    elementType max() const { return _max; };
    void min( elementType );
    void max( elementType );
    int count( double value ) const;
private:
    int size;
    elementType *parray;
    elementType _min;
    elementType _max;
};
练习 2.15
(a) Example2< Array<int>* > ex1;//声明了一个类ex1,数据类型是对象指针。但初始化有问题
(b) ex1.min( &ex1 );//编译错误,类型不匹配
(c) Example2< int > sa( 1024 ), sb;
(d) sa = sb; //数据成员全部为0.
(e) Example2< string > exs( "Walden" );
(f) cout << "exs: " << exs << endl;//输出exs:Walden
练习 2.18
下面的函数对可能的非法数据以及可能的操作失败完全没有提供检查出程序中所有
可能出错的地方本练习中我们不关心可能会抛出的异常
int *alloc_and_init( string file_name )
{
ifstream infile( file_name );//打不开出错
int elem_cnt;
infile >> elem_cnt;
int *pi = allocate_array( elem_cnt );//有可能指针为空
int elem;
int index = 0;
while ( cin >> elem )
pi[ index++ ] = elem;
sort_array( pi, elem_cnt );//调用失败
register_data( pi );//调用失败
return pi;
}
2.9
int *alloc_and_init( string file_name )
{
ifstream infile( file_name );
try
{
    if (!infile)
    {
        throw 1;
    }
}
catch (int)
{
    cout<<"the file can not be opened"<<endl;
}
int elem_cnt;
infile >> elem_cnt;
int *pi = allocate_array( elem_cnt );
try
{
    if (!pi)
    {
        throw 1;
    }
}
catch (int)
{
    cout<<"the file can not be opened"<<endl;
}
int elem;
int index = 0;
while ( cin >> elem )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。