(原)第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;#includeint 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;}
- (原)第2章 类
- (原)第1章 C++简介
- 第2章:列表和元组 (原书抄写)
- 原书摘录::第2章 横向管理工作进程的5个阶段
- 第23条(第五章 泛型):不要在新代码中使用原生态类型
- 第一周项目三——时间类(原题)
- 第2课 原书第一章结束 06-04-11
- 第2课:OpenGL几何图原——点
- Kafka的副本策略——《Learning Apache Kafka》学习笔记(原书第三章第4节)
- 《JS高级程序设计》第6章读书笔记:对象继承(三)原型式继承和寄生式继承
- 第16周 项目2-去除字符串str1中的特定字符(空格),结果仍保存在原字符串中
- 第三天 原串翻转
- 原类
- 集合类的学习笔记(原)
- Muduo源码分析(2):原子类
- 原书摘录:第3章纵向管理:巧妙制定工作计划
- 第16周 项目2-去除字符串str1中的特定字符(空格),结果仍保存在原字符串中<指针做参数>
- 第13周 项目1-数组大折腾(5)【原数据往后移动】
- asp.net控件开发基础(9)
- .net 数据格式设置大全
- visio序列图中绘制actor
- mysql数据库主从服务器数据同步
- update delete left join
- (原)第2章 类
- 失败原因 :数据库连接字符无效,请与管理员联系!
- 系统分析师考试通过,好开心喔,大家快来恭喜我啊!
- centos 5.1 xen virt-manager创建虚拟机时出现Unable to complete install: 'Invalid install location'的问题
- 系统安全的最小特权原则
- JetSpeed2.1.3教程学习总结
- sql 复制数据库问题
- 有关域服务器免登录问题以及获取域服务器下所有登录账号【深海原创】
- 使用php的DOM函数,解析网页元素