item2-item4

总论:

默认函数返回不允许用作左操作数;
C++确实强类型,编译器不是容易被欺骗的,哈哈,常量对象调用常量成员函数,不能改变其值;
将返回值,变量,成员函数,声明为const可以帮助编译器查找应用错误;
编译器是bitwise的constness,我们应该知晓logistic constness,应用mutable来处理变量;
当const与non-const函数内容几近一样时,可以在non-const函数中调用const函数。

C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static 对象,而其它static对象称为non-local static对象。
初始化内建类型;
尽量应用初始化列表,而不用赋值初始化
避免初始化顺序的影响,应用local static而不用non-local static

//head file

class GamePlayer
{
private:
 //static const double NumTurns = 5.88;   //only static const int variant is allowed in-class initialization
 const int NumTurns;
 //int scores[NumTurns];

public:
 void Display();
 GamePlayer(int num):NumTurns(num) {}
};

//implement file


int globenum = 100;
#include <iostream>
#include "GamePlayer.h"
using std::cout;
using std::endl;

 //const double GamePlayer::NumTurns = 5.99;

void GamePlayer::Display()
{
 cout << NumTurns << endl;
}

int main()
{
 int globenum = 1;
 GamePlayer player1(10);
 player1.Display();
 cout << ::globenum;

}

 item 3

//header file


class TextBlock
{
public:
// const char&  operator [](std::size_t pos) const
 char&  operator [](std::size_t pos) const
 {
  return text[pos];
 }

 char & operator [](std::size_t pos)
 {
  return text[pos];
 }
// TextBlock(std::string str):text(str)
 TextBlock(char * ctext):text(ctext)
 {}

private:
 //std::string text;   // 对于c++ 类型,如果对常量对象调用 operator[ ]函数则返回类型必须为 const,这是强类型所表现;但是对于c内建类型,返回值可以没有const,从而增加了可以通过指针修改const数据类型的风险,所以鼓励应用c++内建类型的表现也在/于此!


 char * text; //应用此类型就可以对const的operator返回非const类型。 另:指针的操作效率是没有数组高的,可以看其汇编
};

 

//implement file

#include <iostream>
#include "GamePlayer.h"
using std::cout;
using std::endl;

void print(const TextBlock &ctb)
{
 std::cout << ctb[0];
}

void main()
{
 const TextBlock ctb("persist");
 TextBlock tb("perseverance");

 print(ctb);
 print(tb);

 char *p = &ctb[0];
  *p = 'a';
 //ctb[0] = 'a';
 
 print(ctb);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值