• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
BeyondTechnology
博客园    首页    新随笔    联系   管理    订阅  订阅

随笔分类 -  C/C++

C/C++
输入输出重定向

摘要:常用的重定向:输出重定向:for exampleCMD下,当前目录为D盘, 把dir的输出结果重定向到data.txt中d: \>dir > data.txt把ConsoleDemo.exe输出到屏幕的内容重定向到output.txt文件中d:\>ConsoleDemo.exe > output.txt输入重定向:把input.txt文件的内容作为参数传递给ConsoleDemo.exeCMD下,当前目录为D盘,d:\>ConsoleDemo.exe < input.txt 阅读全文
posted @ 2011-03-26 23:58 BeyondTechnology 阅读(297) 评论(0) 推荐(0)
new操作符失败

摘要:================================================================================== 我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码: int* p = new int[SIZE]; if ( p == 0 ) // 检查 p 是否空指针 return -1; // 其它代码 其实,这 阅读全文
posted @ 2011-01-09 23:21 BeyondTechnology 阅读(3057) 评论(1) 推荐(0)
返回局部变量、局部变量的引用和指向局部变量的指针

摘要:当返回局部对象的值时,会产生一个临时对象,局部对象将值拷贝给该临时对象(拷贝构造),所以当函数结束时,尽管局部已经析构了,但是它保存了一个副本在临时对象中,当函数接收完局部对象的值后(其实此时又进行了一次拷贝)临时对象析构。但返回局部对象的引用时,就出问题了,因为引用相当于是一个别名,也就是说返回局部引用所对应的内存快的内容给函数返回的接收对象,当函数结束时,局部对象被析构,内存块的内容变为未定义... 阅读全文
posted @ 2010-10-13 20:38 BeyondTechnology 阅读(2079) 评论(0) 推荐(0)
混合使用标准库类string和C风格字符串

摘要:可以使用C风格字符串对string对象进行初始化或赋值string类型的加法操作需要两个操作数,可以使用C风格字符串作为其中一个操作数,也允许将C风格字符串用作复合赋值操作的右操作数。在要求使用C风格字符串的地方不可以直接使用标准库string类型对象无法使用string对象初始化字符串指针:stringst2("hello world"); char *str = st2;    //compl... 阅读全文
posted @ 2010-09-29 01:45 BeyondTechnology 阅读(528) 评论(0) 推荐(0)
创建动态数组

摘要:1、初始化动态分配的数组如果数组元素具有类型,将使用该类的默认构造函数初始化,如果是内置类型,则无初始化:string *psa = new string[10];    //array of 10 empty stringsint *pia = new int[10];        //array of 10 uninitialized ints也可以使用跟在数组长度后面的一对空圆括号,对数组... 阅读全文
posted @ 2010-09-29 01:35 BeyondTechnology 阅读(952) 评论(0) 推荐(0)
C风格字符串

摘要:以空字符null结束的字符数组:char ca1[] = {'C','+','+'};        //no null,not C-style stringchar ca2[] = {'C','+','+','\0'};      //explicit nullchar ca3[] = {'C','+','+'};        //null terminator added automatic... 阅读全文
posted @ 2010-09-29 01:23 BeyondTechnology 阅读(2946) 评论(1) 推荐(0)
指针和const限定符

摘要:1、指向const对象的指针const double pi = 3.14;double *ptr = &pi;        //error:ptr is a plain pointerconst double *cptr = &pi;    //ok:cptr is a pointer to const不能用void *指针保存const对象的地址,而必须使用const void... 阅读全文
posted @ 2010-09-28 22:53 BeyondTechnology 阅读(302) 评论(0) 推荐(0)
字符数组

摘要:char ca1[] = {'C','+','+'};      //no nullchar ca2[] = {'C','+','+','\0'};    //explicit nullchar ca3[] = "C++";        //null terminator added automaticallyca1的维数是3,而ca2和ca3的维数则是4下面的初始化将导致编译时的错误:cons... 阅读全文
posted @ 2010-09-28 22:32 BeyondTechnology 阅读(181) 评论(0) 推荐(0)
头文件

摘要:1、头文件用于声明而不是用于定义定义只可以出现一次,而声明可以出现多次。下列语句是一些定义,不应该放在头文件里:extern int ival = 10;double fica_rate;虽然ival声明为extern,但是它有初始化式,代表这条语句是一个定义。类似地,fica_rate的声明虽然没有初始化式,但也是一个定义,因为没有关键字extern。同一个程序中有两个以上文件含有上述任一个定义... 阅读全文
posted @ 2010-09-28 22:25 BeyondTechnology 阅读(300) 评论(0) 推荐(1)
const对象默认为文件的局部变量

摘要:在全局作用域里定义非const变量时,它在整个程序中都可以访问。可以把一个非const变量定义在一个文件中,假设已经做了合适的声明,就可以在另外的文件中使用这个变量://file_1.hint counter;  //definition//file_2.hextern int counter;  //uses counter from file_1.h++counter;    //increm... 阅读全文
posted @ 2010-09-28 22:05 BeyondTechnology 阅读(849) 评论(0) 推荐(0)
变量的声明和定义

摘要:定义用于为变量分配存储空间,还可以为变量指定初值,在一个程序中,变量有且仅有一个定义。声明用于向程序表明变量的类型和名字。可以使用extern关键字声明变量而不定义它。extern int i;    //declares but does not define iint i;        //declares and defines iextern声明不是定义,也不分配存储空间。只是说明变量定... 阅读全文
posted @ 2010-09-28 21:36 BeyondTechnology 阅读(288) 评论(0) 推荐(0)
父类指针转换成子类指针

摘要:有如下定义:class A {};class B : public A{};A* pA = new B;下列代码无法完成转换的是( )A) B* pB = static_cast<B*>(pA);B) B* pB = reinterpret_cast<B*>(pA);C) B* pB = dynamic_cast<B*>(pA);D) B* pB = (B*)p... 阅读全文
posted @ 2010-09-24 22:37 BeyondTechnology 阅读(2145) 评论(1) 推荐(0)
一些混淆过的输出结果

摘要:下面代码执行后,正确的输出是( ) char *a ="Hello"; char b[6]="Hello"; if (a==b) { if (*a == *b) printf(“AA”); else printf(“BB”); } else { if (*a == *b) printf(“CC”); else printf(... 阅读全文
posted @ 2010-09-24 22:02 BeyondTechnology 阅读(311) 评论(0) 推荐(0)
输出结果

摘要:#include<iostream>#include<complex>using namespace std;class Base{public:virtual void f( int iParam){cout << "Base::f(int)" << endl;};virtual void f( double dParam){cout <&l... 阅读全文
posted @ 2010-09-24 20:58 BeyondTechnology 阅读(199) 评论(0) 推荐(0)
为什么会是这样的输出结果

摘要:#include<iostream>using namespace std;class Base{public:virtual void g( int i = 10 ){cout << i << endl;};};class Derived: public Base{public:void g( int i = 20 ){cout << "Deriv... 阅读全文
posted @ 2010-09-24 20:19 BeyondTechnology 阅读(274) 评论(0) 推荐(0)
基类指针通过子类的虚函数调用子类的非虚函数

摘要:class A {public:  virtual void op();  ……};class B : public A {public:  void op(); // 在这个函数中会调用anotherOperator,但anotherOperator不是虚函数  void anotherOp();  ……};A* a = new B;a-&... 阅读全文
posted @ 2010-09-24 19:56 BeyondTechnology 阅读(1213) 评论(0) 推荐(0)
使用sizeof计算类的大小

摘要:类的sizeof大小一般是类中的所有成员的sizeof大小之和,这个就不用多说。不过有两点需要注意:1)当类中含有虚成员函数的时候,例如:class B{float a;public:virtual void fun(void);}此时sizeof(B)的大小为8,而不是4。因为在类中隐藏了一个指针,该指针指向虚函数表,正因为如此,使得C++能够支持多态,即在运行时绑定函数的地址。2)另一个要注意... 阅读全文
posted @ 2010-09-21 10:40 BeyondTechnology 阅读(16650) 评论(1) 推荐(6)
C++函数重定义、重载、重写

摘要:C++函数重定义、重载、重写1. 重写 (override): 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。 1) 被重写的函数不能是 static 的。必须是 virtual 的 ( 即函数在最原始的基类中被声明为 virtual ) 。 2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)3) 重写函数的访问修饰符可以不同。尽管 virtual 是 p... 阅读全文
posted @ 2010-09-20 07:23 BeyondTechnology 阅读(22701) 评论(3) 推荐(1)
union:C/C++语言关键字

摘要:1. 共用体声明和共用体变量定义  共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义   共用体声明和共用体变量定义与结构体十分相似。其形式为:   union 共用体名{   数据类型 成员名;   数据类型 成员名;   ...   } 变量名;共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在unio... 阅读全文
posted @ 2010-09-19 20:31 BeyondTechnology 阅读(7829) 评论(1) 推荐(0)

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3