(原)第2章 类

来源:互联网 发布:广东快乐十分软件 编辑:程序博客网 时间:2024/05/21 21:54
class Fraction{public:Fraction(int n, int d = 1):m_Numerator(n),m_Denominator(d){}private:int m_Numerator;int m_Denominator;};int main(){   Fraction frac(8);   /*調用轉換構造函數*/   Fraction frac2 = 5;   /*附識*/   frac = 5;   /*c的類型影射*/   frac = (Fraction)7;   /*顯示的臨時變量*/   frac = Fraction(6);   frac = static_cast(6);}
class Fraction {public:Fraction(int n,int d):m_number(n),m_Denom(d){++ctors;}Fraction(const Fraction& other):m_number(other.m_number),m_Denom(other.m_Denom){++copies;}Fraction & operator= (const Fraction& other){m_number = other.m_number;m_Denom = other.m_Denom;++assigns;return *this; }Fraction multiply(Fraction f2){return Fraction (m_number * f2.m_number, m_Denom * f2.m_Denom);}static void report();private:int m_number;int m_Denom;static int ctors;static int copies;static int assigns;};int Fraction::copies = 0;int Fraction::ctors = 0;int Fraction::assigns = 0;#include int main(int argc, char *argv[]){using namespace std;Fraction twothirds(2,3);Fraction threequarters(3,4);/*以下の二つはコピー構造関数を利用する*/Fraction acopy(twothirds);Fraction f4 = threequarters;cout << "after declarations /n";Fraction::report();f4 = twothirds;cout << "before multiply /n";Fraction::report();/*お先にFraction(const Fraction& other)を呼びかける*/f4 = twothirds.multiply(threequarters);cout << "after multply /n";Fraction::report();return 0;}void Fraction::report(){std::cout << "/n assigns" << assigns;std::cout << "/n ctors" << ctors;std::cout << "/n copies" << copies;}

1 )使用结构的主要优势是什么?

2  )指出类与结构之间存在的至少一个不同点。

类与结构的不同点:1,虽然结构与类的类型不一样,可是他们的基类型都是对象。2,虽然结构的初始化也用了new操作,,可结构对象分配在站上,而不是堆上,3,结构是可以没有继承的。4,结构没有默认的构造函数,但是可以添加构造函数,没有析构函数,没有抽象和封装的概念,在结构中初始化实例字段是错误的。

3  )类作用域与块作用域有何不同

4  )描述应该使用友元函数的两种情形。

友元机制允许非成员函数访问一个类的私有数据,友元可以是一个类,也可以是另外一个类的成员函数,还可以是任何一个非成员函数。1种情形是使用工厂方法,还有一种是使用全局操作符函数。

5  )静态数据成员和非静态数据成员相比有什么不同?

6  )静态成员函数和非静态成员函数之间有什么不同?

一个类的静态数据成员也仅仅在程序开始执行之前创建一次,同样在程序终止的时候销毁。静态数据对象不属于某个特定的对象。它是被该类的所有对象共享。

静态成员函数只能访问静态成员,它没有this指针,属于整个类而非类的对象。

7  )把一个函数申明为const有什么实际含义

表明此函数不能改变主对象的状态,也就是this是一个指向const变量的指针。

8  )试解释如果某个类T有一个原形如下的构造函数将会出现什么问题?T::T(T other);

会出现编译错误。

补充:

转换构造函数:可以只用一个(不同类型的)参数进行调用的构造函数。使用关键字explicit将阻止隐式机制使用此构造函数。

class Timer{public:    /*其所有成员函数都可以访问到m_elapsed*/    friend class Clock;    friend void Time::toString();    friend ostream& operator <<(ostream& os, const Timer& obj);private:long m_elapsed;}
原创粉丝点击