【C/C++学院】0831-类与对象的异常/面试100题1-100

简介: <p></p> <h2><span style="font-family:宋体; font-size:16pt">类与对象的异常</span><span style="font-family:宋体; font-size:16pt"></span></h2> <p></p> <p>Cpp<span style="font-family:宋体">异常</span></p> <pre

类与对象的异常

Cpp异常

#include <iostream>
#include <string.h>

using namespace std;

//标识错误的类型
class wrong  
{
};

int intdiv(int a, int b)
{
	try
	{	  
		if (b==0)
		{
			throw 10;//可以是任何对象  wrong();
		}
		int c = a / b;
		return c;
	}
	catch (int data )//类型名
	{		
		cout << "除法异常已经处理";
		return -1;
	}
}

int intdivA(int a, int b)
{
	return a / b;
}

void main()
{
	int x, y;
	cin >> x >> y;
	try
	{
		if (y==0)
		{
			throw "被除数为0";
		}
		else if (x==0)
		{
			throw "除数为0";
		}
	}
	catch (const char * s)
	{
		if (strcmp(s,"被除数为0")==0)
		{
			cout << "被除数为0异常,请重新输入";
			cin >> x >> y;
		}
		else  if (strcmp(s, "除数为0") == 0)
		{
			cout << "除数为0异常,请重新输入";
			cin >> x >> y;
		}
	}

	std::cout << intdiv(x, y);
	cin.get();
	cin.get();
	cin.get();
}

类的异常

#include<iostream>
using namespace std;

class wrong
{
};

class wrongA
{
};

class Array
{
public:
	Array(int num)
	{
		n = num;
		
		if (num<=0)
		{
			throw  wrong();
		}
		p = new int[num];//正确代码在throw之后,不会被执行,
		for (int i = 0; i < num;i++)
		{
			p[i] = 0;
		}
	}

	int & operator[](int num)
	{
		if (num < 0 || num>= n)
		{
			throw wrongA();
		}
		return p[num];
	}
protected:
private:
	int *p;
	int n;
};

void main()
{
	try
	{
		Array myarrar(2);
		myarrar[-1];
	}
	catch (wrongA  e)
	{		
		cout << "下标越界";
	}
	catch (wrong  e)
	{
		cout << "程序发生异常,数组大小必须大于等于1";
	}

	cin.get();
}

void mainA()
{
	int a[3] = { 1, 2, 3 };
//	printf("%d", 2[a]);//*(2+a)
//	printf("%d", a[9886655]);
	getchar();
}


#include<iostream>
#include <string>

using namespace std;

class box   //正方体
{
public:
	box(int data) 
	{
		cout << "开始构造";
		if (data ==0)
		{
			zero z1;
			z1.errorcode = 212;
			throw z1;
		} 
		else if ( data >0 && data<100)
		{
			throw small();
		}
		else  if (data>10000)
		{
			throw big();
		}
		else if (data>100 && data<10000)
		{
			a = data;
		}
		else
		{
			throw wrong{};
		}		
	}
	
    int  gettiji()
	{
		 return  a*a*a;
	}

	class zero
	{
	public:
		int errorcode;
	
	}; 
	class wrong{};
	class big{};
	class small{};
private:
	int a;//变长
};

void main()
{
	try
	{
		box newbox(0);
	}
	catch (box::zero w)
	{
	    if (w.errorcode==22)
	    {
			cout << "22号错误正方体长度不可以为0";
	    } 
	    else
	    {
			cout << "fei22号错误正方体长度不可以为0";
	    }		
	}
	catch (box::wrong)
	{
		cout << "正方体长度异常";
	}
	catch (box::big)
	{
		cout << "正方体长度太长";
	}
	catch (box::small)
	{
		cout << "正方体长度taiduan";
	}

	cin.get();
}

面试1001-100

单独整理成文档







目录
相关文章
|
3月前
|
缓存 安全 编译器
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
《C++面试冲刺周刊》第三期聚焦指针与引用的区别,从青铜到王者级别面试回答解析,助你21天系统备战,直击高频考点,提升实战能力,轻松应对大厂C++面试。
432 131
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
|
2月前
|
安全 编译器 C++
C++异常详细介绍
C++异常详细介绍
282 10
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
146 0
|
5月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
157 0
|
5月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
249 0
|
7月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
286 12
|
8月前
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
8月前
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
8月前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
173 16
下一篇
oss云网关配置