随笔分类 - C++
与C++相关的内容
摘要:分配方式:栈由系统自动分配和释放,用于存放函数的参数值,局部变量值等。堆由程序员分配和释放,若程序员不释放,可能在程序结束时由操作系统回收。分配效率:栈的分配效率比堆要高得多,但堆的使用更灵活。空间大小:栈是连续的一块内存区域,其空间较小,是在编译时就确定了的,易产生栈溢出。堆的内存区域是不连续的,其空间较大。碎片问题:堆的使用容易产生碎片,使程序效率降低。而栈则不存在这个问题。
阅读全文
摘要:使用setw(n)设置输出宽度时,默认为右对齐,如下:// include <iostream>// include <iomanip>std::cout << std::setw(5) << "1" << std::endl;std::cout << std::setw(5) << "10" << std::endl;std::cout << std::setw(5) << "100" << std::
阅读全文
摘要:用过各种 C/C++ 的 IDE,有些真的让人很蛋疼。比如说用 Dev-C++(记不清是不是它了,好像VS也有这情况),编写控制台程序,调试运行,程序一执行完毕控制台窗口就闪没了,强烈考验我们的眼里。通常呢,我们会在后面加上一条具有阻塞功能的语句比如:// 版本 1// #include <conio.h>getch();// 版本 4// #include <stdlib.h>system("pause");// 版本 3// 在 C++ 中也可以是// #include <iostream>char chNothing;std::ci
阅读全文
摘要:发牢骚之前先温习一下重载函数的定义:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。根据教条主义,@.@~~哦,说错了,根据教材定义,如果有两个名字相同的函数,二者形参名字和类型都相同,但一个函数的形参带 const 修饰,而另一个函数不带 const 修饰,那么这两个函数应该也是重载函数。就像下面这两个版本://// 版本 1 //int increase(int &val){ return ++val;}//// 版本 2//int increase(const int &val){ return val + 1;}没错,根据 IDE 编译证实
阅读全文
摘要:话说刚才写求最大公约数的代码时,为了提高可靠性,加入了IO错误判断,可测试结果让人不解,先看修改前的部分代码: int a = 0, b = 0; cout << "Please input two number to computing they GCD: "; while (!(cin >> a >> b)) { cin.clear(); // 将流中的所有状态值都重设为有效值 cout << "Input Error !" << endl; cout << "Inpu
阅读全文
摘要:通常,为了实现多态性,我们将基类的指针或引用指向派生类对象。而当需要使用该派生类对象的特有方法时,可以通过将基类指针转换为派生类指针以达到目的。这样做总是合法的。也许在某些特殊情况下,需求刚好相反,我们需要将基类对象转换为派生类对象。没错,是对象对象,不是指针。先看一下我们的基类和子类的示例代码吧!//// CBase.h// #ifndef __C_BASE_H#define __C_BASE_Husing std::string;using std::cout;using std::endl;class CBase{protected : string _name;public : CBa
阅读全文
摘要:#include <iostream> //不要用iostream.h ,会出现好多问题#include <iomanip> // io 流控制头文件, 主要是一些操纵用法如setw(int n),setprecision(int n) ,setbase(int n),setfill(char c)的. ▲setw(n)用法: 通俗地讲就是预设宽度 如 cout<<setw(5)<<255<<endl; 结果是: (空格)(空格)255 ▲setfill(char c) 用法 : 就是在预设宽度中如果已存在没用完的宽度大小,则用设置的
阅读全文
摘要:先给出通过字符型指针输出字符串的示例代码,如下:#include <iostream>using std::cout;using std::endl;int main(){ const char *pszStr = "this is a string"; // 输出字符串 cout << "字符串:" << pszStr << endl; // 显然不会输出地址值 cout << "字符串起始地址值: " << pszStr << endl; retu
阅读全文
摘要:题目:用C++ 设计一个不能被继承的类。分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误
阅读全文
摘要:在C++编程语言中,还有很多比较高深的内容值得我们在学习和实践中不断的学习。在这篇文章中,我们将会为大家详细介绍有关C++ const变量的相关内容,希望能帮助大家轻松了解这方面知识。一、对于基本声明const int r=100;标准C++ const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为此文件,编译器经过类型检查后直接用100在编译时替换。extend const int r=100;将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。const int r[ ]={1,2,3,4};
阅读全文
摘要:1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; 5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点; 6.会用Visual C++,并不说明你会C++; 7.学class并不难,templat.
阅读全文