C++随记

C++随记(0x02)1

一、string 类
char chs[20];
cin.getline(chs,20);

这种句点表示法表明 getline() 是istream类的一个类方法(cin是istream的类对象),使用 getline() 可以避免越过数组边界。

string str;
getline(cin,str);

这里对 string 对象没有使用句点表示法,说明 getline() 不是类方法,string 对象是可变大小的,不需要限定边界。

小知识:为什么前一个 getline() 是类方法,另一个不是呢?
因为在引入 string 类前,C++早有 istream 类,因此 istream 设计时考虑到了 double 、int 和其他基本类型的类方法,但是没有处理 string 对象的类方法,所以只能另外设计一个 getline() 函数来处理 string 对象。

cin >> chs;
cin >> str;

cin 还是可以处理 string 对象,是因为处理 string 对象的代码使用 string 类的一个友元函数。


二、字符串字面值

如果要输出以下这句话

Jim "King" Tutt uses "\n" instead of endl.

使用标准字符串字面值,需要编写如下

cout << "Jim \"King\" Tutt uses \"\\n\" instead of endl." << endl;

这种方法需要多个转义符,很是麻烦,C++11新增了原始字符串类型(在原始字符串中,字符表示的就是自己),上述输出可编写为

cout << R"(Jim "King" Tutt uses "\n" instead of endl.)" << endl;

若原始字符中带有 "()" ,那咋办?
可以使用自定义定界符(在默认定界符之间添加 任意数量基本字符,但空格 、左右括号、斜杠和控制字符(如制表符和换行符)除外)来代替默认界定符,如:

cout << R"+-(please call me "(liangzai)")+-" << endl;
//输出
please call me "(liangzai)"

是不是很方便啊


三、OOP介绍

面向对象编程传统的过程性编程的区别在于:OOP强调的是在运行阶段进行决策,而面向过程则是在编译阶段进行决策。
运行阶段决策就好比在度假时,选择参观那些景点取决于当时的天气和心情;编译阶段决策更像在不管什么条件下,都坚持预先设定好的行程安排。
运行阶段决策提供了灵活性,例如为数组分配内存时,数组的长度在编译时就已经决定好了。
如:给数组分配200个元素,在80%的情况下只需用到100个元素,那程序在大多数情况下都是浪费了内存。而OOP通过将这些决策推迟到运行阶段,在运行时,可以这次告诉它只需100个元素,而下次还可以告诉它需要200个元素。


  1. 参考自《C++ Primer Plus》 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值