随笔分类 - C++基础知识
摘要:一.使用控制符控制输出格式 输出结果: input a:34↙(输入a的值)dec:34 (十进制形式)hex:22 (十六进制形式)oct:42 (八进制形式) China (域宽为)*****China (域宽为,空白处以'*'填充)pi=3.14285714e+00 (指数形式输出,8位小数)
阅读全文
摘要:一.static_cast static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,如: 二.const_cast const_cast用来去掉表达式的 const 修饰或 volatile 修饰。换句话说,const_cast 就是用来将 const/volatile
阅读全文
摘要:当以拷贝的方式初始化一个对象时,会调用一个特殊的构造函数,就是拷贝构造函数(Copy Constructor)。 例如: 其中将 Student stu2 = stu1; Student stu3(stu1) 时,就调用了拷贝构造函数。
阅读全文
摘要:一.转换构造函数 将其它类型转换为当前类类型需要借助转换构造函数(Conversion constructor)。转换构造函数也是一种构造函数,它遵循构造函数的一般规则。转换构造函数只有一个参数。 运行结果: 10 + 20i25.5 + 0i 二.类型转换函数 运行结果: f = 24.6f =
阅读全文
摘要:C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception)。你可以通过下面的语句来捕获所有的标准异常: 之所以使用引用,是为了提高效率。如果不使用引用,就要经历一次对象拷贝(要调用拷贝构造函数)的过程。exception 类位于 <exc
阅读全文
摘要:一.在函数模板中使用非类型参数 运行结果: 99, 1010, 20, 30, 40, 501, 2, 3, 4, 5
阅读全文
摘要:应用背景: 例如有下面的函数模板,它用来获取两个变量中较大的一个: 请读者注意a > b这条语句,>能够用来比较 int、float、char 等基本类型数据的大小,但是却不能用来比较结构体变量、对象以及数组的大小,因为我们并没有针对结构体、类和数组重载>。另外,该函数模板虽然可以用于指针,但比较的
阅读全文
摘要:Java中的泛型编程可以极大的提升编程的效率,比如在android中查找一个控件的ID:标准写法为: 或者: 因为同为查询控件ID,所以上面的写法可以采用泛型编程精简为: 这样在下次使用的时候就可以写成这样: C++中也有类似的东西,不过名字变了,叫模板(template)。 一.函数模板 例:交换
阅读全文
摘要:运算符重载的格式为: 一.在类里面实例运行符重载 运行结果: 6.7 + 9.5i 1.运算符重载其实就是定义一个函数,在函数体内实现想要的功能,当用到该运算符时,编译器会自动调用这个函数。也就是说,运算符重载是通过函数实现的,它本质上是函数重载。 2.operator是关键字,专门用于定义重载运算
阅读全文
摘要:使用 string 类需要包含头文件<string>,下面的例子介绍了几种定义 string 变量(对象)的方法: 一.length() 返回字符串长度 注意: 与C不同,string末尾没有'\0'字符,所以length返回的是字符串的真实长度,而不是长度+1 二.c_str() 转换为C风格的字
阅读全文
摘要:一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数
阅读全文
摘要:typeid可用来判断类型是否相等: 例如有下面的定义:
阅读全文
摘要:一.基本语法 在C++中,可以将虚函数声明为纯虚函数,语法格式为: 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。
阅读全文
摘要:一.虚函数使用的注意事项 1.只需要在虚函数的声明处加上 virtual 关键字,函数定义处可以加也可以不加。 2.为了方便,你可以只将基类中的函数声明为虚函数,这样所有子类中具有遮蔽(覆盖)关系的同名函数都将自动成为虚函数。 3. 当在基类中定义了虚函数时,如果派生类没有定义新的函数来遮蔽此函数,
阅读全文
摘要:一.产生背景 先看下面的例子: 运行结果: 王志刚今年23岁了,是个无业游民。赵宏佳今年45岁了,是个无业游民。 我们直观上认为,如果指针指向了派生类对象,那么就应该使用派生类的成员变量和成员函数,这符合人们的思维习惯。但是本例的运行结果却告诉我们,当基类指针 p 指向派生类 Teacher 的对象
阅读全文
摘要:一.产生背景 先看下列一份代码: 运行: 编译器报错:“reference to 'm_a' is ambiguous”,说明m_a变量指代不清,编译器不知道该为哪个m_a赋值,事实上,B和C均继承于A,所以B和C中均有m_a这个变量,此时在D中为m_a赋值,就搞不清楚究竟是给B中的m_a赋值还是给
阅读全文
摘要:一.继承的基本语法 继承的基本语法为: 在本例中,class 后面的“Student”是新声明的子类,冒号后面的“People”是已经存在的基类。在“People”之前有一关键宇 public,用来表示是公有继承。继承方式包括 public(公有的)、private(私有的)和 protected(
阅读全文
摘要:(重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外。 第一种写法:(错误) 第二种写法: 第三种写法(正确) 第四种写法:(正确) 为什么加了const就可以?这是因为将常引用绑定到临时数据时,编译器采取了一种妥协机制:编译器会为
阅读全文
摘要:函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。 如果函数体代码比较多,需要较长的执行时间,
阅读全文
摘要:在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象。 一 const 成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通
阅读全文