第12 章主要讲类的一些基本概念.
这几个习题都是跟 class 中的 static 成员相关的.
有如下几点值得注意:
1.static 成员的初始化 (或者说叫 定义 ),紧随 class 声明比较合适.换句话说,就是和class 声明放在同一个 .h 文件中.
形如
class A
{
static int m_iTest;
};
int A::m_iTest = 3;
2.尽量地多用const 关键字.
最近看了本书,云风写的<<游戏之旅-我的编程感悟>>,其中有一句比较调侃,
说在最短时间里看c++ 程序员水平高低,就看他写的c++代码里const出现的频率就行了...
3.一些小操作可以inline 在 class 中.
inline 函数类似 macro ,调用时没有出栈 压栈的开销.
Foo.h
#ifndef FOO_H
#define FOO_H
class Foo
{
private:
int m_iVal;
public:
Foo()
{
m_iVal = 0;
}
Foo(int Val):m_iVal(Val){}
int GetVal() const
{
return m_iVal;
}
};
#endif
Bar.h
#ifndef BAR_H
#define BAR_H
#include"Foo.h"
class Bar
{
private:
static int m_iVal;
static Foo m_Foo;
static int callsFooVal;
public:
Foo FooVal()
{
++callsFooVal;
return m_Foo;
}
int GetCallsFooVal() const
{
return callsFooVal;
}
};
int Bar::callsFooVal = 0;
Foo Bar::m_Foo(0);
int Bar::m_iVal = 20;
#endif
main.cpp
#include<iostream>
#include"Bar.h"
using namespace std;
int main()
{
Bar *pBar = new Bar();
cout << "Get foo val: " << pBar->FooVal().GetVal() << endl;
cout << "Sum:" << pBar->GetCallsFooVal() << endl;
cout << "Get foo val: " << pBar->FooVal().GetVal() << endl;
cout << "Sum:" << pBar->GetCallsFooVal() << endl;
cout << "Get foo val: " << pBar->FooVal().GetVal() << endl;
cout << "Sum:" << pBar->GetCallsFooVal() << endl;
cout << "Get foo val: " << pBar->FooVal().GetVal() << endl;
cout << "Sum:" << pBar->GetCallsFooVal() << endl;
delete pBar;
return 0;
}
ps 一些废话:
前一段时间项目非常紧张,每天都加班到很晚.再加上自己常常犯懒,一直也没有系统的学习.包括现在也是这个状态.
我觉得有必要调整调整.即使没有大块的时间,抓紧零碎地时间也能做一些事情,比如 看C++ Primer,熟悉一些小的知识点,发上来.
总觉得这样一个个知识点的去学习C++ 语言本身,有点像啃字典,非常愚蠢.
等时间比较充裕了,考虑一边学习C++语法,一边熟悉设计模式,把设计模式参考书上的例子用 C++实现一遍。算是对自己的监督吧。
还有另外一个想法 ::等项目结束了,时间相对宽松些,考虑用 C++ 模仿公司的开发工具,做个图形处理的小demo.
勉励一下自己,希望自己不要再懒散,学习坚持下来,别让自己上面说的2点变成空谈。
过一段时间能把自己的小成果发到这里来分享。
最后,表达一下小静静对我加班的支持和理解.谢谢你每天等我加班,给我送饭.小静静你辛苦了!