析构函数

String类的构造函数,析构函数、拷贝构造函数和赋值函数

匿名 (未验证) 提交于 2019-12-02 23:52:01
(1)构造函数 String::String(const char *str) { if(str==NULL) { m_data = new char[1]; *m_data = ‘\0’; } else { Int length = strlen(str); m_data = new char[length]; Strcpy(m_data,str); } } (2)析构函数 String::~String(void) { delete []m_data; } (3)拷贝构造函数 String::String(const String &other) { Int length = strlen(other); m_data = new char[length+1]; Strcpy(m_data,other.m_data); } (4)赋值函数 String & String::operate = (const String &other) { If(this == &other) Return *this; Delete []m_data; m_data = NULL; M_data = new char[strlen(other.m_data)]; Strcpy(m_data,other.m_data); Return *this; }   

析构函数 实例析构 类析构

匿名 (未验证) 提交于 2019-12-02 23:40:02
#!python# -*- coding:utf-8 -*-# 场景:# 目的:通过单例实现客户端调用sdk时,sdk中的方法对客户端数据的批处理# 参考:# {# Python单例模式(Singleton)的N种实现 - 知乎# https://zhuanlan.zhihu.com/p/37534850# 设计模式(Python)-单例模式 - 简书# https://www.jianshu.com/p/ec6589e02e2f# http://xiaorui.cc/2016/04/10/python多线程下保持单例模式的实例唯一/# PythonDecoratorLibrary - Python Wiki# https://wiki.python.org/moin/PythonDecoratorLibrary# 3. Data model ― Python 3.7.3 documentation# https://docs.python.org/3/reference/datamodel.html#object.__new__# 8.10. Queue ― A synchronized queue class ― Python 2.7.16 documentation# https://docs.python.org/2/library/queue.html# The

【c++基础】c++常见面试问题

匿名 (未验证) 提交于 2019-12-02 23:39:01
1、const 2、static 3、volatile 4、extern 5、new & malloc 6、delete & delete[] 7、strlen & sizeof 8、内存对齐 9、零值比较 10、指针和引用的区别 11、指针与数组 12、指针类型问题 13、智能指针是怎么实现的?什么时候改变引用计数? 构造函数中计数初始化为1; 拷贝构造函数中计数值加1; 赋值运算符中,左边的对象引用计数减一,右边的对象引用计数加一; 析构函数中引用计数减一; 在赋值运算符和析构函数中,如果减一后为0,则调用delete释放对象。 share_prt与weak_ptr的区别? 14、c++多态性和虚函数表 C++多态的实现? 虚函数的作用? 虚函数用于实现多态,这点大家都能答上来但是虚函数在设计上还具有封装和抽象的作用。比如抽象工厂模式。 动态绑定是如何实现的? 静态多态和动态多态。静态多态是指通过模板技术或者函数重载技术实现的多态,其在编译器确定行为。动态多态是指通过虚函数技术实现在运行期动态绑定的技术。 虚函数表 虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的? 编译器为每一个类维护一个虚函数表,每个对象的首地址保存着该虚函数表的指针,同一个类的不同对象实际上指向同一张虚函数表。 纯虚函数如何定义,为什么对于存在虚函数的类中析构函数要定义成虚函数

C++ 虚拟析构函数

匿名 (未验证) 提交于 2019-12-02 23:03:14
转自: http://see.xidian.edu.cn/cpp/biancheng/view/247.html 当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。但是,如果用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时,会发生一个情况:系统会只执行基类的析构函数,而不执行派生类的析构函数。 [例12.3] 基类中有非虚析构函数时的执行情况。为简化程序,只列出最必要的部分。 #include using namespace std; class Point//定义基类Point类 { public : Point(){}//Point类构造函数 ~Point(){cout< span>"executing Point destructor"< span>endl;}//Point类析构函数 }; class Circle: public Point //定义派生类Circle类 { public : Circle(){}//Circle类构造函数 ~Circle(){cout< span>"executing Circle destructor"< span>endl;}//Circle类析构函数 private : int radius; }; intmain(

C++构造函数与析构函数

╄→尐↘猪︶ㄣ 提交于 2019-12-02 15:02:14
3.2构造函数 Part1.应用场景 在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。 Part2.定义及代码 3.2.1构造函数、默认构造函数 1) 定义 :在定义对象的时候进行的数据成员设置,称为对象的初始化。     构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。 2) 性质 :      ①构造函数的函数名与类名相同;     ② 构造函数没有返回值;     ③通常被声明为公有函数;     ④构造函数在对象被调用的时候自动创建。 3) 默认构造函数 :     调用时无需提供参数的构造函数称为默认构造函数。     如果类中没有写构造函数,编译器会自动生成一个隐含的默认构造函数,该构造函数的参数列表和函数体皆为空。     如果声明了构造函数(无论是否有参数),编译器都不会在为之生成隐含的构造函数。 例上题: class Clock{ public: Clock(){} //编译系统生成的隐含的默认构造函数 ... }; 这个构造函数不作任何事。 自己定义的构造函数: class Clock { public: Clock(int newH,int newM,int newS);//构造函数,函数名与类名相同,且没有返回值类型 void setTime(int newH = 0, int newM = 0, int

深入理解C++定位new

老子叫甜甜 提交于 2019-12-02 14:54:23
简介 一般的new运算符负责在heap堆中找到一个足以能够满足要求的内存块。 new运算符还有另一种变体:定位new运算符(placement new),它能够让程序员指定要使用的位置。既将new运算符用于提供了的地址。 定位new运算符在头文件中。 定位new运算符直接使用传递给它的地址,它不负责判断哪些内存单元已被使用,也不查找未使用的内存块。这将一些内存管理的负担交给了程序员。 一个例子: 下面用一个简单的程序来说明定位new的用法: # include <new> # include <iostream> # include <stdlib.h> using namespace std ; int main ( ) { //chunk of memory内存池 char * buffer = ( char * ) malloc ( 512 * sizeof ( char ) ) ; int * p1 , * p2 , * p3 , * p4 ; //常规new: p1 = new int [ 10 ] ; //定位new: p2 = new ( buffer ) int [ 10 ] ; for ( int i = 0 ; i < 10 ; ++ i ) p1 [ i ] = p2 [ i ] = 20 - i ; cout << "p1 = " << p1 << endl

《C++ 习题与解析》笔记

人盡茶涼 提交于 2019-12-02 14:53:46
目录 ####Chapter-1 C++语言概述(错题) ####Chapter-2 类和对象 ####Chapter-3 引用 ####Chapter-4 友元函数 #### Chapter-5 运算符重载 #### Chapter-6 继承与派生(错题) #### Chapter-7 多态性和虚函数 #### Chapter-8 异常处理 C++基础: 基础数据类型,简单输入输出,流程控制语句,函数与编译预处理,数组,结构体,指针与引用 C++面向对象部分: 类与对象,构造和析构函数,继承与派生,友元,虚函数,静态成员,运算符重载 Chapter-1 C++语言概述 位运算操作符 单目:~(按位求反) 双目:&(与)、 |(或)、 ^(按位异或) 移位运算符 << (左移): 左移是将一个二进制数按指定的位数向左移位,移掉的位被丢弃,右边移出的空位一律补0 >> (右移): 右移是将一个二进制数按指定的位数向右移位,移掉的位被丢弃,左边移出的空位一律补0,或补符号位 逗号运算符 d1, d2, d3, d4: 计算一个逗号表达式的值时,从左至右依次计算各个表达式的值,最后计算的一个表达式的值和类型便是整个逗号表达式的值和类型 二维数组指针表示 //输出对应的值的三种方法 int b[2][3]; a. *(*(b+i)+j) b. *(b[i]+j) c. *(&b[0][0]

详谈C++中的多态

和自甴很熟 提交于 2019-12-02 11:32:06
详谈C++中的多态 1.多态基本概念 多态是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征。多态性(polymorphism)提供接口与具体实现之间的另一层隔离,从而将”what”和”how”分离开来。 c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。 //计算器 class Caculator{ public: void setA(int a){ this->mA = a; } void setB(int b){ this->mB = b; } void setOperator(string oper){ this->mOperator = oper; } int getResult(){ if (this->mOperator == "+"){ return mA + mB; } else if (this->mOperator == "-"){ return mA - mB; } else if (this->mOperator == "*"){ return mA * mB; } else if (this->mOperator == "/"){ return mA / mB; } } private: int mA; int mB; string mOperator; };

虚函数以及纯虚函数

天涯浪子 提交于 2019-12-02 11:27:30
   多态性 是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。   虚函数和纯虚函数都是实现多态的重要方法。本文就这两种方法进行分析以及比较 1、虚函数 在基类中声明为 virtual 并在一个或者多个派生类被重新定义的成员函数 语法规则: virtual 函数返回类型 函数名(参数表) {函数体} 语法分析:虚函数的声明和定义和普通的成员函数一样,只是在返回值之前加入了关键字virtual。      在基类当中定义了虚函数,可以再子类中定义和基类中相同函数名、相同参数、相同返回值和不同实现体的虚函数      定义为虚函数是为了让 基类函数的指针或者引用来指向子类。 #include<iostream> using namespace std; class A { public: void fun() { cout << "A::fun()..." << endl; } }; class B :public A { public: void fun() { cout << "B::fun()...." << endl; } }; int main() { A *a = new A; //A类指针指向A类对象 a->fun(); A *b = new B; //A类指针指向B类 对象 b->fun(); delete a;

c++纯虚函数与抽象基类

一曲冷凌霜 提交于 2019-12-02 11:22:06
首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 1、简介 假设我们有下面的类层次: class A { public : virtual void foo ( ) { cout << "A::foo() is called" << endl ; } } ; class B : public A { public : void foo ( ) { cout << "B::foo() is called" << endl ; } } ; int main ( void ) { A * a = new B ( ) ; a - > foo ( ) ; // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0 ; } 这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓"推迟联编"或者"动态联编"上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为"虚"函数。