当前位置:   article > 正文

C++程序设计 - Week 1 从C走进C++_coursera 测验:从c走向c++

coursera 测验:从c走向c++

郭炜 blog 刘家瑛

《新标准C++程序设计教程》,郭炜,清华大学出版社,2012

http://www.cplusplus.com/

edX PekingX: 04831750.1x C++ 程序设计

Coursera C++程序设计

Coursera 程序设计与算法 Fundamentals of Programming and Algorithms

函数指针

类型名(*指针变量名)(参数类型1,参数类型2,……);

int (*pf)(int, char);

void qsort(void *base, int nelem, unsigned int width, 
        int (*pfCompare)(const void*, const void*));

typedef int (*PTRFUN)(int, char);   
PTRFUN pf; 
int result = (*pf)(n, str);

typedef int (*FP_CALC)(int, int);
FP_CALC calc_func(char op);
//s_calc_func为函数,它的参数是 op,     
//返回值为一个拥有两个int参数、返回类型为int的函数指针    
int (*s_calc_func(char op)) (int , int);
FP_CALC fp = calc_func(op);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

对数组排序,需要知道:数组起始地址,数组元素的个数,每个元素的大小,元素谁在前谁在后的规则。

typedef函数指针用法

Question

《C陷阱和缺陷》地址0?

命令行参数

int main(int argc, char *argv[])
  • 1

位运算

& | ^ ~ << >>

按位与:通常用来将某变量中的某些位清零且同时保留其他位不变,也可以用来获取某变量中的某一位。

按位或:通常用来将变量中的某些位置1且保留其他位不变。

按位异或:通常用来将某变量中的某些位取反且保留其他位不变。

a ^ b = c --> c ^ b = a, c ^ a = b
  • 1

不通过临时变量,交换两个变量的值。(穷举法)

a = a ^ b;
b = b ^ a;
a = a ^ b;
  • 1
  • 2
  • 3

按位非

左移运算符:左移n位,等于乘以2^n。

右移运算符:大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1。

-25 >> 4 = -2
-2 >> 4 = -1
18 >> 4 = 1

(a >> n) & 1 // 0 <= n <=31
(a & 1 << n)) >> n // 0 <= n < 31, 符号位的风险
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

原码, 反码, 补码 详解
Bit Twiddling Hacks 二进制运算的神奇应用
Google Code上面的一个基于浮点数标准的快速算法库,里面也用到了各种二进制运算

引用

类型名 &引用名 = 某变量名;
  • 1

某个变量的引用,等价于这个变量,相当于该变量的一个别名。定义引用时一定要将其初始化成引用某个变量。初始化后,它就一直引用该变量,不会再引用别的变量了。

引用只能引用变量,不能引用常量和表达式。

void swap(int *a, int *b); // C
swap(&n1, &n2);

void swap(int &a, int &b); // C++
swap(n1, n2);
  • 1
  • 2
  • 3
  • 4
  • 5

引用作为函数的返回值(cin,运算符重载)

int n = 4;
int &SetValue() { return n; }
SetValue() = 40;
cout << n;
  • 1
  • 2
  • 3
  • 4

常引用:不能通过常引用去修改其引用的内容。

const int &r = n;
  • 1

const T & 和 T &是不同的类型。T &类型的引用或T类型的变量可以用来初始化const T &类型的引用。const T类型的常变量和const T &类型的引用则不能用来初始化T &类型的引用,除非进行强制类型转换。

const

1) 定义常量,便于类型检查

const int MAX_VAL = 23;
  • 1

2) 定义常量指针,不可通过常量指针修改其指向的内容,但指向可以变化

const int *p = &n;
  • 1

定义常量指针,不能把常量指针赋值给非常量指针,反过来可以

const int *p1;
int *p2;
p1 = p2; // ok
p2 = p1; // error
p2 = (int*) p1; // ok,强制类型转换
  • 1
  • 2
  • 3
  • 4
  • 5

函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容。

void MyPrint(const char *p);
strcpy(p, "this"); // 编译出错,strcpy第一个参数char*,类型不匹配,故编译出错
  • 1
  • 2

3) 定义常引用,不能通过常引用修改其引用的变量。

非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。在全局作用域声明的const变量是定义该对象的文件的局部变量,此变量只存在于那个文件中,不能被其他文件访问。

int counter;
extern int counter;

extern const int bufsize = 10;
extern const int bufsize;
  • 1
  • 2
  • 3
  • 4
  • 5

C/C++中const关键字详解 应该还可以吧,内容有点多,还没看完
关于C++ const 的全面总结 貌似有错误,看评论

Question

const成员函数?

动态内存分配

用new运算符实现动态内存分配

分配一个变量

T *P = new T;
p = new int;
  • 1
  • 2

分配一个数组

P = new T[N];
  • 1

用new动态分配的内存空间,一定要用delete运算符进行释放。

delete 指针;
delete []p;
  • 1
  • 2

C++二维数组new小结(zz)

vector

vector<vector<int>> a(row,vector<int>(column));
  • 1

内联函数、函数重载、函数缺省参数

内联函数

函数调用是有时间开销的。如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下,调用函数所产生的这个开销就会显得比较大。

为了减少函数调用的开销,引入了内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。

inline int Max(int a, int b) {
    if (a > b) return a;
    return b;
}

k = Max(n1, n2);
if (n1 > n2)
    tmp = n1;
else
    tmp = n2;
k = tmp;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

可执行程序的体积会增大。

函数重载

一个或多个函数,名字相同,然而参数个数或参数类型不相同,这叫做函数的重载。

函数重载使得函数命名变得简单。

编译器根据调用语句中的实参的个数和类型判断应该调用哪个函数。

函数缺省参数

C++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值。

函数参数可缺省的目的在于提高程序的可扩充性。

如果某个写好的函数要添加新的参数,而原先那些调用该函数的语句,未必需要使用新增的参数,那么为了避免对原先那些函数调用语句的修改,就可以使用缺省参数。

比如画圆,之后加入颜色支持。

void func(int x1, int x2 = 2, int x3 = 3) { }
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/806829
推荐阅读
相关标签
  

闽ICP备14008679号