-
C++异常处理
所属栏目:[语言] 日期:2023-06-08 热度:6205
程序的错误大致可以分为三种,分别是语法错误、逻辑错误和运行时错误:
1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序。语法错误是最容易发现、最容易定位、最容易排除的[详细] -
弱类型的语言
所属栏目:[语言] 日期:2023-06-08 热度:5683
弱类型语言在定义变量时不需要显式地指明数据类型,编译器(解释器)会根据赋给变量的数据自动推导出类型,并且可以赋给变量不同类型的数据。典型的弱类型语言有 JavaScript、Python、PHP、Ruby、Shell、Perl 等。[详细]
-
强类型语言
所属栏目:[语言] 日期:2023-06-08 热度:2087
强类型语言在定义变量时需要显式地指明数据类型,并且一旦为变量指明了某种数据类型,该变量以后就不能赋予其他类型的数据了,除非经过强制类型转换或隐式类型转换。典型的强类型语言有 C/C++、Java、C# 等。
下面[详细] -
C++运算符重载注意事项
所属栏目:[语言] 日期:2023-06-08 热度:1111
在 C++ 中进行运算符重载时,有以下问题需要注意:
重载后运算符的含义应该符合原有用法习惯。例如重载+运算符,完成的功能就应该类似于做加法,在重载的+运算符中做减法是不合适的。此外,重载应尽量保留运算符原[详细] -
C++强制类型转换运算符
所属栏目:[语言] 日期:2023-06-08 热度:3440
在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。
类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这[详细] -
C++重载new和delete运算符
所属栏目:[语言] 日期:2023-06-07 热度:9178
内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。
以成员函[详细] -
C++重载自增和自减运算符
所属栏目:[语言] 日期:2023-06-07 热度:853
自增++和自减--都是一元运算符,它的前置形式和后置形式都可以被重载。请看下面的例子:
#include <iostream>
#include <iomanip>
using namespace std;
//秒表类
class stopwatch{
public:
stopwatch([详细] -
C++重载下标运算符
所属栏目:[语言] 日期:2023-06-07 热度:216
C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下:
返回值类型 & operator[ ] (参数);
或者:
const 返回值类型 & operator[ ] (参数) const;
使用第一种声明方式,[[详细] -
C++重载输入和输出运算符
所属栏目:[语言] 日期:2023-06-07 热度:4107
在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,但是输入输出的对象只能是 C++ 内置的数据类型(例如 bool、int、double 等)和标准库所包含的类类型(例如 [详细]
-
C++运算符重载时需要遵循的规则
所属栏目:[语言] 日期:2023-06-07 热度:8356
运算符重载是通过函数重载实现的,概念上大家都很容易理解,这节我们来说一下运算符重载的注意事项。
1) 并不是所有的运算符都可以重载。能够重载的运算符包括:
+ - * / % ^ & | ~ ! = < > += -=[详细] -
C++运算符在全局范围内重载运算符
所属栏目:[语言] 日期:2023-06-07 热度:5709
运算符重载函数不仅可以作为类的成员函数,还可以作为全局函数。更改上面的代码,在全局范围内重载+,实现复数的加法运算:
#include <iostream>
using namespace std;
class complex{
public:
complex();[详细] -
C++运算符重载分析
所属栏目:[语言] 日期:2023-06-07 热度:2717
所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。
实[详细] -
C++ typeid运算符判断类型是否相等
所属栏目:[语言] 日期:2023-06-07 热度:3393
typeid 运算符经常被用来判断两个类型是否相等。
1) 内置类型的比较
例如有下面的定义:
char *str;
int a = 2;
int b = 10;
float f;
类型判断结果为:
类型比较 结果 类型比较 结果
typeid(int)[详细] -
C++ typeid运算符
所属栏目:[语言] 日期:2023-06-07 热度:5449
typeid 运算符用来获取一个表达式的类型信息。类型信息对于编程语言非常重要,它描述了数据的各种属性:
对于基本类型(int、float 等C++内置类型)的数据,类型信息所包含的内容比较简单,主要是指数据的类型。
对[详细] -
C++虚函数注意事项
所属栏目:[语言] 日期:2023-06-07 热度:437
C++ 虚函数对于多态具有决定性的作用,有虚函数才能构成多态。这节我们来重点说一下虚函数的注意事项。
1) 只需要在虚函数的声明处加上 virtual 关键字,函数定义处可以加也可以不加。
2) 为了方便,你可以只将[详细] -
C++虚继承
所属栏目:[语言] 日期:2023-06-06 热度:3380
为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。
在继承方式前面加上 virtual 关键字就是虚继承,请看下面的例子:
//间接基类A
class A{
protected:[详细] -
多继承下的构造函数
所属栏目:[语言] 日期:2023-06-06 热度:1262
多继承形式下的构造函数和单继承形式基本相同,只是要在派生类的构造函数中调用多个基类的构造函数。以上面的 A、B、C、D 类为例,D 类构造函数的写法为:
D(形参列表): A(实参列表), B(实参列表), C(实参列表){
[详细] -
C++基类和派生类的析构函数
所属栏目:[语言] 日期:2023-06-06 热度:391
和构造函数类似,析构函数也不能被继承。与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉。
另外析构函数的执行顺序和[详细] -
C++基类构造函数调用规则
所属栏目:[语言] 日期:2023-06-06 热度:6024
事实上,通过派生类创建对象时必须要调用基类的构造函数,这是语法规定。换句话说,定义派生类构造函数时最好指明基类构造函数;如果不指明,就调用基类的默认构造函数;如果没有默认构造函数,那么编译失败。请看下[详细]
-
C++构造函数的调用顺序
所属栏目:[语言] 日期:2023-06-06 热度:5621
基类构造函数总是被优先调用,这说明创建派生类对象时,会先调用基类构造函数,再调用派生类构造函数,如果继承关系有好几层的话,例如:
A --> B --> C
那么创建 C 类对象时构造函数的执行顺序为:
A类构造函数[详细] -
C++基类和派生类的构造函数介绍
所属栏目:[语言] 日期:2023-06-06 热度:1610
构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。
在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的[详细] -
C++派生类中的访问权限
所属栏目:[语言] 日期:2023-06-06 热度:8243
使用 using 关键字可以改变基类成员在派生类中的访问权限,例如将 public 改为 private、将 protected 改为 public。
注意:using 只能改变基类中 public 和 protected 成员的访问权限,不能改变 private 成员的访[详细] -
C++三种继承方式
所属栏目:[语言] 日期:2023-06-06 热度:3797
C++继承的一般语法为:
class 派生类名:[继承方式] 基类名{
派生类新增加的成员
};
继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected(受保护的)。[详细] -
C++继承和派生简明分析
所属栏目:[语言] 日期:2023-06-06 热度:4506
C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。
继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于[详细] -
C++引用作为函数返回值
所属栏目:[语言] 日期:2023-06-06 热度:9926
引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子:
#include <iostream>
using namespace std;
int &plus10(int &r) {
r += 10;
return r;
}
int main() {
int num1 = 10;[详细]