- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2第二讲——类与对象课件
第二章 类与对象;C++的概念要点:;类;封装;封装的实现;封装的语法;类定义;可放置在类中的任何位置;
不可在声明时初始化;
不可声明为extern、register,但可以是static 或 const。
应避免将数据成员放在公有接口中,因为那将使类丧失弹性和抽象性。
不要将类的数据成员与函数成员同名。;Hour
Minute
Second;成员函数;内联成员函数;内联成员函数举例——隐式声明;内联成员函数举例——显式声明;“类” 访问模型;构造函数;构造函数;构造函数的特点:;构造函数的工作特点;构造函数可以显式调用;无参构造函数调用;默认构造函数;默认构造函数不同于带默认值的构造函数,也不同于无参构造函数;无参构造函数不同于默认构造函数;创建对象的几种方式;拷贝构造函数;例 拷贝构造函数定义;关于拷贝构造函数;拷贝构造函数调用 1;拷贝构造函数调用 2;拷贝构造函数调用 3;拷贝构造函数调用的定律;关于默认拷贝构造函数;构造函数与拷贝构造函数的关系;关于临时对象;提倡用引用作函数的形参;析构函数;析构函数的调用时机:;C++能自动产生的成员函数;例:;如果需要,这些函数就会被生成,你会很容易就需要它们。下面的代码将使得每个函数被生成:
const Empty e1; // 缺省构造函数
Empty e2(e1); // 拷贝构造函数
e2 = e1; // 赋值运算符
Empty *pe2 = e2; // 取址运算符(非const)
const Empty *pe1 = e1; // 取址运算符(const)
最后调析构函数。
顺便说一句,生成的析构函数一般是非虚的,除非它所在的类是从一个声明了虚析构函数的基类继承而来。;思考:;“组合”的概念 (composition);举例;类组合的语义;类组合时构造函数的设计;初始化列表;关于初始化列表;初始化列表的不当使用反例;类的组合举例(二);class Whole //整体类
{
public:
Whole();
Whole(int i,int j,int k);
Whole(Whole wr);
~Whole();
void Print();
private:
Part one;
Part two;
int data;
};;类组合的构造函数调用(1);类组合的构造函数调用(2);课堂练习;类组合时拷贝构造函数的设计;课堂练习;前置声明;例 具有静态、动态生存期对象的时钟程序;//时钟类成员函数的实现
Clock::Clock() //构造函数
{
Hour=0;
Minute=0;
Second=0;
}
void Clock::SetTime(int NewH, int NewM, int NewS)
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
void Clock::ShowTime()
{
coutHour:Minute:Secondendl;
};Clock globClock; //声明对象globClock,
//具有静态生存期,文件作用域
void main() //主函数
{
coutFirst time output:endl;
//引用具有文件作用域的对象:
globClock.ShowTime(); //对象的成员函数具有类作用域
globClock.SetTime(8,30,30);
Clock myClock(globClock);
//声明具有块作用域的对象myClock
coutSecond time output:endl;
myClock.ShowTime(); //引用具有块作用域的对象
};程序的运行结果为:
First time output:
0:0:0
Second time output:
8:30:30
此题的globClock是全局对象,它是在编译时就已经规划好了的,等到程序加载后,在主函数运行之前抢先运行了——调用构造函数。;C++ 对数据的共享机制;18;18;静态成员(类属性成员);例 具有静态数据成员的 Point类;Point::Point(Point p)
{ X=p.X;
Y=p.Y;
countP++;
}
文档评论(0)