c++ primer 学习笔记2Word文件下载.docx

上传人:b****5 文档编号:19808057 上传时间:2023-01-10 格式:DOCX 页数:47 大小:40.19KB
下载 相关 举报
c++ primer 学习笔记2Word文件下载.docx_第1页
第1页 / 共47页
c++ primer 学习笔记2Word文件下载.docx_第2页
第2页 / 共47页
c++ primer 学习笔记2Word文件下载.docx_第3页
第3页 / 共47页
c++ primer 学习笔记2Word文件下载.docx_第4页
第4页 / 共47页
c++ primer 学习笔记2Word文件下载.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

c++ primer 学习笔记2Word文件下载.docx

《c++ primer 学习笔记2Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++ primer 学习笔记2Word文件下载.docx(47页珍藏版)》请在冰豆网上搜索。

c++ primer 学习笔记2Word文件下载.docx

iostream"

3.using 

namespace 

std;

4. 

5.namespace 

6.{ 

7. 

class 

CStonewt 

8. 

9. 

public:

10. 

CStonewt( 

double 

lbs 

) 

11. 

12. 

m_nStone 

int( 

Lbs_per_stn;

13. 

m_fPds_left 

Lbs_per_stn 

);

14. 

m_fPounds 

lbs;

15. 

16. 

int 

stn, 

17. 

18. 

stn;

19. 

20. 

stn 

21. 

22. 

CStonewt() 

23. 

24. 

0;

25. 

26. 

~CStonewt() 

27. 

28. 

29. 

30. 

void 

show_lbs() 

const 

31. 

32. 

cout 

stone"

pound\n"

endl;

;

33. 

34. 

show_stn() 

35. 

36. 

37. 

38. 

private:

39. 

enum 

14 

};

40. 

m_nStone;

41. 

m_fPds_left;

42. 

m_fPounds;

43. 

44.} 

45. 

46.int 

_tmain(int 

argc, 

_TCHAR* 

argv[]) 

47.{ 

48. 

myCat;

49. 

myCat 

19;

50. 

51. 

return 

52.} 

2)将构造函数用作自动类型转换函数似乎是一项不错的特性。

不过,当程序员拥有更丰富的C++经验时,将发现这种自动也行并非总是合乎需要的,因为这会导致意外的类型转换。

因此,最新

的C++实现新增了一个关键字(explicit),用来关闭这种自动特性。

也就是说,可以这样声明构造函数:

1.explicit 

2.{ 

3. 

5. 

6.} 

但此时仍然可以进行myCat=(CStonewt)19.5;

强制类型转换。

3)把CStonewt类对象赋值给int、double变量

要进行这样的操作时,编译器发现右侧是CStonewt类型,而左侧是int、double类型,因此它将查看程序员是否定义了与此匹配的转换函数(如果没有找到这样的定义,编译器将生成错误消息

,指出无法将CStonewt赋给int、double)

如果想要使用这种转换函数,要转换为typeName类型,需要使用这种形式的转换函数:

operatortypeName();

注意以下几点:

a、转换函数必须是类方法

b、转换函数不能指定返回类型

c、转换函数不能有参数

[html] 

explicit 

~CStonewt(){} 

operator 

int() 

100.5 

double() 

999.5 

41.} 

43.int 

44.{ 

46. 

(CStonewt)19.5;

47. 

fValue 

iValue 

is:

52. 

53.} 

类和动态内存分配

小插曲:

strlen()返回字符串长度,但不包括末尾的空字符,因此构造函数len+1,使分配的内存能够存储包含空字符的字符串

1)含有很多隐藏错误的stringBad类

StringBad.h:

1.#ifndef 

_STRINGBAD_H_ 

2.#define 

4.#include 

5.#include 

string"

6.using 

8.class 

StringBad 

9.{ 

10.public:

StringBad();

StringBad( 

char* 

str 

~StringBad();

friend 

ostream&

operator<

( 

os, 

StringBad&

sb 

16.private:

m_str;

m_nLen;

19.public:

static 

num_strings;

21.};

23.#endif 

StringBad.cpp:

StringBad.h"

4.int 

StringBad:

:

num_strings 

6.StringBad:

StringBad() 

7.{ 

m_nLen 

4;

m_str 

new 

char[ 

];

num_strings++;

strcpy_s( 

m_str, 

strlen( 

C++"

1,"

\"

object 

created"

13.} 

15.StringBad:

16.{ 

m_str,m_nLen 

 

22.} 

24.StringBad:

~StringBad() 

25.{ 

if 

delete[] 

num_strings--;

in 

the 

32.} 

34.ostream&

35.{ 

os 

this 

sb.m_str 

len 

sb.m_nLen 

os;

39.} 

testStringBad.cpp:

6.void 

callme1( 

rStringBad 

function 

callme1"

10.} 

12.void 

callme2( 

stringBad 

13.{ 

callme2"

16.} 

18.int 

19.{ 

headline1( 

Create 

headline1"

headline2( 

headline2"

sport( 

sport"

headline1 

headline2 

sport 

Initialize 

one 

to 

another:

sailer 

sport;

sailer"

Assign 

anther:

knot;

knot 

headline1;

knot"

End 

of 

main()"

44. 

46.} 

2)

复制拷贝函数

1.StringBad&

operator= 

st) 

if( 

== 

&

st 

*this;

6. 

str;

st.len;

str:

strcpy( 

str, 

st.str 

12.} 

3)

重写下标运算符

1.char&

operator[] 

m_str[ 

4.} 

5.const 

char&

8.} 

为什么要提供两个版本。

原因是m_str是常量,而上述方法无法确保不修改数据。

但在重载时,C++将区分常量和非常量函数的特征标,因此提供了另一个仅供constString对象使用的

operator[]()版本

4)

新的String类

3.#include 

4.using 

6.#define 

MAXTEMPSIZE 

256 

myString 

myString() 

1, 

num_string++;

myString():

myString( 

):

myString&

rString 

rString.m_str 

~myString() 

num_string--;

~myString():

HowMany() 

num_string;

inline 

length() 

53. 

54. 

55.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1