C和C++代码精粹笔记1
CH1 更好的C
- 运算符重载规定,必须有一个为用户自定义类型
- 一些输出没注意到的函数:
float x = 123.456, y = 12345;
//cout.precision(2); //显示两个有效值,其他是科学计数法
//cout << x << " " << y << endl;
//cout.setf(ios::showpoint);//显示末尾的0
//cout << x << " " << y << endl;
cout.setf(ios::showpos);//显示符号
cout << x << " " << y << endl;
- 打印地址
Printf("%p",s);
Cout<<"address: "<<&s;
CH2 指针
- 区别 const的位置
Const char *p; 说明 *p是常量,不能改变。
Char* const p; 说明,p是常量,不能改变。
依据看 * 的位置。
- 初始化二维指针
int **a;
a = new int*[3];//行
for(int i = 0; i < 4; ++i)
{
a[i] = new int[4];//列
}
delete[] a;
int a[][4] = {{1,2,3},{4,5,6},{7,8,9}};
int (*p)[4] = a;
//p[i] == *(p+i);
//p[i][j] == *(p[i]+j) == *(*(p+i)+j);
size_t totals = sizeof(a);//整个字节数
size_t totalcols = sizeof(a[0]);//整个列字节数
size_t rows = sizeof(a)/sizeof(a[0]);
size_t cols = sizeof(a[0])/sizeof(a[0][0]);
for(int i = 0; i < rows; ++i)
{
for(int j = 0; j < cols; ++j)
cout << p[i][j] << " ";
cout <<endl;
}
cout << rows << " " << cols << endl;
- 函数指针
指向非成员函数的指针:
#include <Windows.h>
#include <iostream>
using namespace std;
int (*fp)(int,int);//全局指针变量
void (*farray[])(void); //可以定义在主函数外部,也可以在内部定义。 函数指针数组
int Max(int a, int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
fp = Max;
int a = fp(1,2);
cout << a << endl;
return 0;
}
指向成员函数的指针:
#include <Windows.h>
#include <iostream>
using namespace std;
class C
{
public:
void f(){cout << "C::f \n";};
void g(){cout << "C::g \n";};
int Max(int a, int b)
{
if(a > b)
return a;
else
return b;
}
};
int main()
{
C c;
void (C::*pmf)() = &C::f; //定义指向成员函数的指针
(c.*pmf)();//指向成员函数的指针,与非成员函数的指针相比,语法上有点小变化,多了 对象.*
pmf = &C::g;
(c.*pmf)();
int (C::*fp)(int,int) = &C::Max;
int aa = (c.*fp)(3,4);
cout << aa << endl;
return 0;
}
指向成员函数的指针数组
- #include <Windows.h>
- #include <iostream>
- using
namespace std; - class Object
- {
- public:
- void retreve(){cout << "Object::retreve";}
- void insert(){cout << "Object::insert";}
- void update(){cout << "Object::update";}
- void process(int choice);
- private:
- typedef void(Object::*Omf)();//起别名起的好
- static Omf farray[3];// 成员函数指针数组
- };
- Object::Omf Object::farray[3] = {
- &Object::insert,
- &Object::retreve,
- &Object::update
- };
- void Object::process(int choice)
- {
- if(choice >=0 && choice <=2)
- {
- (this->*farray[choice])();
- cout << endl;
- }
- }
- int main()
- {
- Object o;
- for(;;)
- {
- int choice;
- cin >> choice;
- if(choice >=0 && choice<=2)
- o.process(choice);
- else
- break;
- }
- return 0;
- }
- 封装与不完全类型
采用与源类相似的类实现,就是重新定义一个与源类相似的类,然后重新包装一下。
CH3 预处理器
- debug模式下可以运行 release下运行不了,用宏定义实现
#define DEBUG 1
int main()
{
int i = 2;
#if DEBUG
cout << "debugmod" << endl;
#endif
return 0;
}
下面这句话也可以实现上面的功能
#ifdef _DEBUG
cout << "debugmod" << endl;
#endif
// _DEBUG
要想将新的C++代码与旧的C代码混合编程,需要加下面的语句
extern "C" void f(); //f()在C环境下被编译
- 字符集
回车 \r 换行 \n 回退 \b 警示 \a
CH4 C标准库之一 : 面向合格的程序员
1、<ctype.h>
常见的函数: is系列。Eg : isupper(); islower(); isspcace() 等。
char a = 'A';
int b = isalpha(a);
实例:
- #include <Windows.h>
- #include <iostream>
- #include<ctype.h>
- #include <stdlib.h>
- #include<stdio.h>
- #include <string.h>
- using
namespace std; - long atox(char *s)
- {
- while(isspace(*s))//干掉开头的空格,只要有一个非零的数即跳出
- s++;
- long sum;
- for(sum = 0L; isxdigit(*s); ++s)
- {
- int digit;
- if(isdigit(*s))
- digit = *s - '0';
- else
- digit = toupper(*s) - 'A' + 10;
- sum = sum*16L + digit;
- }
- return sum;
- }
- long atox(char*s)
- {
- char xdigs[] = {0123456789ABCDEF};
- long sum;
- while(isspace(*s))
- s++;
- for(sum = 0; isxdigit(*s); ++s)
- {
- int digit = strchr(xdigs,toupper(*s)) - xdigs;//找到指针的位置,即数字的位置(0-15取值) 找出字符串xdigs中第一次出现字串 (*s) 的位置。
- sum = sum*16L + digit;
- }
- }
- long atox(char *s)
- {
- long n = 0;
- sscanf(s,"%lx",&n); // 参考代码:http://www.91linux.com/html/article/program/cpp/20081130/14121.html
- return n;
- }
- int main()
- {
- char* s = "123 abc";
- //方法一
- long t = atox(s);
- //方法二
- char** ss = NULL;
- long tt = strtol(s,ss,16);
- cout << tt << endl;
- return 0;
- }
C和C++代码精粹笔记1的更多相关文章
- JavaScript语言精粹笔记
JavaScript语言精粹笔记 掌握语言的每个特性可以让你出风头,但是并不推荐,因为一部分的特性带来的麻烦可能远超本身的价值.正如书中所言,坏的材料并不能雕刻出好的作品,要成为一名更好的程序员,要取 ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- Linux-3.0.8 input subsystem代码阅读笔记
先乱序记录一下阅读Linux input subsystem代码的笔记. 在input device driver的入口代码部分,需要分配并初始化input device结构,内核提供的API是inp ...
- [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- 《linux 内核全然剖析》 fork.c 代码分析笔记
fork.c 代码分析笔记 verifiy_area long last_pid=0; //全局变量,用来记录眼下最大的pid数值 void verify_area(void * addr,int s ...
- 《linux 内核全然剖析》sched.c sched.h 代码分析笔记
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011368821/article/details/25129835 sched.c sched.h ...
- 使用Git和Github来管理自己的代码和笔记
一.Github注册 1.先注册github.com的账号,官方网站: https://github.com/ 2.登录 3.创建仓库,仓库分公开的和私有的,公开的是免费的,私有的是收费的.我现在创建 ...
随机推荐
- 使用 Rails Webpacker 安裝 Foundation 6
動機 由於 foundation-rails 6.4.1 版本有個 Issue 目前還沒合併.加上 Rails 已經支援了 webpack 2.x.這篇文章純粹紀錄另外一種做法. 準備 開始使用之前需 ...
- 2018"百度之星"程序设计大赛 - 资格赛
调查问卷 Accepts: 1546 Submissions: 6596 Time Limit: 6500/6000 MS (Java/Others) Memory Limit: 262144 ...
- 【Luogu】P3327约数个数和(莫比乌斯反演+神奇数论公式)
题目链接 真TM是神奇数论公式. 注明:如无特殊说明我们的除法都是整数除法,向下取整的那种. 首先有个定理叫$d(ij)=\sum\limits_{i|n}{}\sum\limits_{j|m}{}( ...
- 学习 WebService 第二步:知识准备——WSDL文件解析
原文地址:https://www.cnblogs.com/yzw23333/p/7245104.html Web service中一个 WSDL 对应一个 web service地址. 可以想象成一个 ...
- P3285 松鼠的新家 (树链剖分)
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...
- bzoj 2801 [Poi2012]Minimalist Security 设一个,求出所有
题目大意 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i), 并且对于每条边(u,v)都满足p(u)+p(v)>=w(u,v). 现在要将顶点i的权值减去 ...
- SharePoint 2013 App 开发—App开发概述
基于安全性的考虑,SharePoint App 不能像其它两种方式一样,直接使用安全性更高的服务端代码的API.Javascript 扮演极为重要的角色,在SharePoint App中与ShareP ...
- CSS 盒模型、解决方案、BFC 原理讲解--摘抄
PS:内容比较基础,目的只是覆盖面试知识点,大佬可以 history.back(-1) W3C 标准盒模型 & IE 怪异盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模 ...
- 专访Nick McKeown:网络领域的游戏颠覆者
如果要找到一个过去10年在网络领域最热的词汇,那么非SDN(软件定义网络)莫属.在过去的十年间无论是学术机构还是标准组织,无论是电信巨擘还是互联网大厂都成其拥趸. 然而几乎每一件SDN的重大事件都离不 ...
- 洛谷—— P3865 【模板】ST表
https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每 ...