
c++
c++基础
u010765526
这个作者很懒,什么都没留下…
展开
-
C++构造函数、析构函数与抛出异常
1,【问题】 构造函数可以抛出异常么?析构函数可以吗?2,【分析】 从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数可以,析构函数不推荐抛出异常。(1)构造函数可以抛出异常无论何时,从构造函数中抛出异常都是可以的。动态创建对象要进行两个操作:分配内存和调用构造函数。若在分配内存时出错,会抛出bad_alloc异常;若在调用构造函数初始化时出错,会不会存在内存泄漏呢?答案是不会。new运算符保证不会出现内存泄漏:T *p = new T...原创 2020-08-20 21:53:56 · 604 阅读 · 0 评论 -
Explicit Constructors(显式构造函数)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p );//用C风格的字符串p作为初始化值//…}String s1 = “hello”;//OK 隐式转换,等价于String s1 = String(“hello”);但是有的时候可能会不需要这种隐式转换,如下:class String { String ( int...原创 2020-08-20 18:00:57 · 277 阅读 · 0 评论 -
c++之this指针
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),t.原创 2020-07-25 11:43:29 · 201 阅读 · 0 评论 -
哪些函数可以成为虚函数,哪些函数不可以成为虚函数
一,什么是虚函数拥有 Virtual 关键字的函数称之为虚函数虚函数的作用是实现动态绑定的,也就是说程序在运行的时候动态的的选择合适的成员函数那么,有哪些函数可以成为虚函数?那些函数不可以成为虚函数?要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果原创 2020-06-14 21:39:04 · 9373 阅读 · 1 评论 -
c++之哪些成员函数不能被继承
C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。一,构造函数 构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。 如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 ..原创 2020-06-14 21:25:50 · 7329 阅读 · 0 评论 -
什么情况下析构函数需要定义为虚函数?
一,为什么基类的析构函数是虚函数呢? 在实现多态时,当一个类被作为基类并且该基类对派生类的对象进行操作,在析构时防止只析构基类而不析构派生类的状况发生。把基类的析构函数设计为虚函数可以在基类的指针指向派生类对象时,用基类的指针删除派生类对象,避免内存泄漏。二,通过几个例子来看一下效果1,例子1:#include<iostream>using name...原创 2020-05-05 18:17:03 · 776 阅读 · 0 评论 -
析构函数
1,什么是析构函数 创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前...原创 2020-05-05 18:06:56 · 379 阅读 · 1 评论 -
从汇编角度看引用
引用类型到底是什么?它和指针有什么关系?它本身占用内存空间吗? 带着这些疑问,我们来进行分析。 先看代码:#include <stdio.h>#include <iostream>using namespace std;void main(){ int x = 1; int &b = x;}通过汇编查看代码如下:9...原创 2020-05-04 17:13:39 · 397 阅读 · 0 评论