随笔分类 - C++ 基础
包含C/C++的一些基础语法的学习
摘要:之前一直都很迷惑pow()函数时怎么实现的,对于整数次的幂我还能很容易做到,但是对于分数次幂就不是那么好做了。需要一些高等数学级数的知识。
我这里实现了求ln(x), pow(double x, double y), exp(x), sin(x), cos(x), sinh(x), cosh(x), tanh(x), arctanh(x)等一些常见的函数功能。具体请看代码
x^y=e^(ln(x)*y)
sinx ≈x-(x^3)/3!+(x^5)/5!-(x^7)/7!-(x^9)/9!...
cos(x) = 1 - (x^2)/2! + (x^4)/4!......
arctanh(x)= x + x^3/3 + x^5/5 + ... (x≤1)
e^x = 1+x+(x^2)/2!+(x^3)/3!+...
sinh(x)=(exp(x) - exp(-x)) / 2.0
cosh(x)=(exp(x) + exp(-x)) / 2.0;
pi/4 = 1 - 1/
阅读全文
摘要:这里的A 类对象的 i 对外接来说就是透明的。通过private 来隐藏对象的某些属性。但是,C++也继承了大部分C的特性,比如说很好很强大的指针。利用指针,我们可以绕过编译器做一些 见不得光的事情。虽然不建议这么做,因为这样不仅破坏了数据的封装特性,也会带来很多危险。不过这里我还是这么做了。。。。。
请看下面的这个例子,利用指针p去修改 对象a 的私有成员i 的值:
阅读全文
摘要:map 对象的元素是键值对(key,value),每个key对应一个value, map默认中按key定义的 “ ::key_type;
value 是一个非const对象,其类型为map::mapped_type;
访问map可以用迭代器访问也可以用下标访问:
1、用迭代器访问:
map::iterator iter = m.begin();......
这时候对迭代器解引用会得到map容器中一个map::value_type 类型的值,对于map容器来说该值是pair类型,再标准库中pair在utility 中声明,pair first 为const 对象保存key;second为非const对象,保存value。
在上面的例子中为pair。因此可以使用迭代器来访问map中的所有值。
阅读全文
摘要:函数重载是C++的一个重要特性,但是函数重载后调用哪一个函数往往令人很困惑,参照《C++ Primer》第七章的内容总结如下:
重载确定函数调用的步骤
1、候选函数(candidate function)
1)、仅当形参是引用或指针时,形参是否为const 才有影响
2)、不能基于指针本身是否为const 来实现函数重载
3)、return 的类型不能用于判断重载
2、可行函数
1)、函数形参个数匹配(默认参数也是实参)
2)、类型匹配,包含隐式转换的匹配
3、寻找最佳匹配
1)、精确类型匹配 > 需要转换的匹配
2)、通过类型提升的转换 > 其他标准转换
阅读全文
摘要:C/C++ 程序调试的几个小技巧
直接看代码常用debug 方法
1、cout.....
2、#ifndef NDEBUG
// debug infomation
#endif
3、assert()断言
阅读全文
摘要:哈哈, 看出说明问题了吧,最后剩下的对象个数居然是-1.
原因在于headline2 按值传递的时候导致了析构函数被调用
StringBad 类的问题是由自动定义的隐式成员函数引起的,这种函数的行为与类的设计不相符。具体来说,C++自动提供了下面这些成员函数:
· 默认构造函数,如果没有定义构。
· 复制构造函数,如果没有定义。
· 赋值操作函数,如果没有定义。
· 默认析构函数,如果没有定义。
· 地址操作符,如果没有定义。
通常在没有自己定义的情况下,编译器将自动生成上述的最后4中函数的定义。
从上面的结果表明编译器是自动生成了隐式复制构造函数和隐式赋值操作符引起的,下面就这几种隐式成员函数进一步讨论:
一、默认构造函数
如果没有提供任何构造函数,C++将默认创建一个不带任何参数的构造函数。
例如定义了一个Test的类
阅读全文
摘要:共用体(union)是一种诗句格式,他能存储不同的数据类型,但是只能一次使用其中一种数据类型。由于共用体每次只能存储一个值。因此它必须有足够大的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。
共用体经常被用在,当数据项使用两种或者更多的格式(但不会同时使用)时,可以节省空间。比如,假设管理一个小商品目录,其中一些商品的ID为整数,而另一些的ID为字符串。这种情况下,可以这样做:
阅读全文
摘要:先回顾一下C语言中的两种读入数据的方式 —— scanf("%s", str)和gets(str)
· scanf(("%s", str)遇到空白字符(空格、制表符、换行符)变结束输入,之后读入的数据将继续停留在缓冲区。
· gets(str) 遇到换行符后结束输入,而最后的'\n'被替换成了'\0',输入缓冲区不会继续保存换行符,因此不会对后面的输入造成影响。
下面写一段代码测试:
阅读全文
摘要:【类型转换】
C++有11种整型和3种浮点类型,当对不同的类型进行计算时,C++会自动执行类型的转换。
【自动类型转换】
执行情况:
· 将一种算数类型赋给另一种算数类型时
· 表达式中包含不同的类型时
· 将参数传递给函数时
· 强制类型转换
1、赋值时进行的转换
· 值将被转换成接受变量的类型。
此时将一个值赋给范围更大的类型通常不会出现什么问题,但是反过来就应该考虑截断(丢掉小数)和精度损失的问题。
· 将0赋给bool类型被转换为false,非零转换为true
2、表达式中的转换
规则如下:
· long double > double > float > long int >= int > s
阅读全文
摘要:魔术师发牌问题
【问题描述】
魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”
魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A,将黑桃A放在桌子上,然后顺序从上到下数手上的余牌,第二次数1,2,将第一张牌放在这些牌的下面,将第二章牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1,2,3,将前面两张依次放在这些牌的下面,再翻第三章牌正好是黑桃3。这样依次进行将13张牌全部翻出,准确无误。
【问】:牌的开始顺序是如何安排的?
【问题分析】
阅读全文
摘要:打印杨辉三角
百度百科列出的一些性质:
·前提:端点的数为1.
·1、每个数等于它上方两数之和。
·2、每行数字左右对称,由1开始逐渐变大。
·3、第n行的数字有n项。
·4、第n行数字和为2^(n-1)。(2的(n-1)次方)
·5、第n行的第m个数和第n-m+1个数相等,即C(n-1,m-1)=C(n-1,n-m),这是组合数性质
阅读全文
摘要:C++简介
C++是一门很强大的语言,但是学好它也不是一件容易的事.
它融合3种不同的编程传统:
•C语言代表的过程性语言传统
•类为代表的面向对象编程传统
•C++模板支持的通用编程传统
阅读全文
摘要:一个简单计算器的实现,Bjarne Stroustrup 《C++程序设计原理与实践》
文法:
阅读全文

浙公网安备 33010602011771号