构造函数

C++基类和派生类的构造函数

流过昼夜 提交于 2020-02-08 20:30:15
派生类不能继承基类的构造函数,若想通过派生类来对基类的private的变量成员进行初始化则需要:    通过派生类的构造函数来调用基类的构造函数完成基类成员变量的初始化. 看下面的例子: #include <iostream> #include<string> using namespace std; class People { private: char *m_name; int m_age; public: People(char*, int); }; People::People(char* name,int age):m_name(name),m_age(age){} class Student : public People { //此处的public是将其基类:People 的成员以其在People内的级别于Student中继承, //即成员在基类中是什么级别就以什么级别被派生类继承.protected则是将public级别的成员改为protected被派生类继承,private则是 //全变成private被派生类继承 private: float m_score; public: Student(char* name, int age, float score); //void display(); }; Student::Student(char*name

C++11的多线程并发编程(二)

回眸只為那壹抹淺笑 提交于 2020-02-08 19:24:02
C++11的多线程并发编程(二) 疫情已到确诊3w+,望早日结束这疫情。 根据上一节学习的的线程概念,开始进一步学习C++11新标准的多线程编程,C++11引入了5个头文件,分别是:atomic, thread, mutex, condition_variable, future。主要包含互斥类,条件变量,同步线程和异步线程等的相关类,这一节主要记录thread头文件的相关内容。 线程的创建std::thread std::thread的构造函数主要有三种:不带参数的构造函数,初始化构造函数,移动构造函数。写个代码举个栗子: # include <iostream> # include <thread> # include <unistd.h> using namespace std ; void myFunc1 ( ) { cout << "hello comedy" << endl ; } void myFunc2 ( int i ) { cout << "hello comedy" << i << endl ; } int main ( int argc , char * argv [ ] ) { int i = 99 ; thread t1 ( myFunc1 ) ; thread t2 ( myFunc2 , i ) ; thread t3 ( myFunc3 , i )

C++处理异常技巧-try,catch,throw,finally

一个人想着一个人 提交于 2020-02-08 19:15:51
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用return value或者是print error message来做,你想过这样做会导致Memory Leak,系统退出,代码重复/难读,垃圾一堆…..吗?现在的软件已经是n*365*24小时的运行了,软件的健壮已经是一个很要考虑的时候了。 自序: 对写程序来说异常真的是很重要,一个稳健的代码不是靠返回Error Message/return Value来解决的,可是往往我们从C走过来,习惯了这样的方式。 仅以本文献给今天将要来临的流星雨把,还好我能在今天白天把这写完,否则会是第4个通宵了;同时感谢Jeffrey大师,没有他的SEH理论这篇文章只能完成一半,而且所有SEH列子的构想都来自他的指导;另外要感谢Scott Meyers大师,我是看他的书长大的;还要感谢Adamc / Darwin / Julian ,当然还有Nick的Coffee 内容导读: (请打开文档结构图来读这篇文章。) 本文包括2个大的异常实现概念:C++的标准异常和SHE异常。 C++标准异常:也许我们了解过他,但你有考虑过,其实你根本不会使用,你不相信,那我问你:垃圾回收在C++中怎么实现?其实不需要实现,C+

自用C++图的类模板

与世无争的帅哥 提交于 2020-02-08 19:13:45
图的实现:使用邻接矩阵 使用方法: 创建类实例: template <typename IndexType,typename DataType> class Graph{ public: Graph() {}//构造函数 Graph(const Graph&);//复制构造函数 Graph& operator=(const Graph&);//赋值函数 Graph(Graph&&);//移动构造函数 Graph& operator=(Graph&&);//移动赋值函数 void show();//显示图 bool insert(IndexType, DataType, IndexType, bool = false);//插入 bool del(IndexType, IndexType, bool = false);//删除 bool update(IndexType, DataType, IndexType, bool = false);//更新 void clear() { name2dex.clear(); dex2name.clear(); mat.clear(); }//清空 DataType shortestpath(IndexType,IndexType);//求最短路径 std::pair<bool, std::vector<IndexType>>

JS类的继承

倾然丶 夕夏残阳落幕 提交于 2020-02-08 18:38:51
首先回顾一下构造函数、原型和实例的关系: 每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,实例都包含一个指向原型对象的内部指针 在JS中,实现继承主要是依靠原型链来实现; 基本思想是:利用原型让一个引用类型继承另一个引用类型的属性和方法。 一、原型链 1.1 概念 假设让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。 首先原型链的基本模式代码如下 function FatherType(){ this.property = true; } FatherType.prototype.getFatherValue = function(){ return this.property; }; function SonType(){ this.sonproperty = false; } SonType.prototype = new FatherType(); //继承了 FatherType SonType.prototype.getsonValue = function (){ return this.sonproperty ; }; var son1= new SonType()

C++笔记11

ぃ、小莉子 提交于 2020-02-08 12:59:27
成员对象和封闭类 有成员对象的类叫封闭类 exp. class CTyre//轮胎类 { private: int radius;//半径 int width;//宽度 public: CTyre(int r,int w):radius(r),width(w){}//冒号后的是初始化列表,可以为每个成员变量附一个初始值 }; class CEngine//引擎类 { }; class CCar{//汽车类,封闭类 private: int price;//价格 CTyre tyre; CEngine engine;//tyre和engine是CTyre和CEngine的对象,tyre和engine就是成员对象engine用无参函数初始化 public: CCar(int p,int tr,int tw); }; CCar::CCar(int p,int tr,int w):price(p),tyre(tr,w) { }; int main() { CCar car(20000,17,225); return 0; } 任何对象初始化时都会引发构造函数的调用 att.如果CCar类不定义构造函数则 CCar car 会出错 因为编译器不明白car.tyre该如何初始化,car.enginr的初始化没有问题,用默认构造函数即可 任何生成封闭类对象的额语句,都要让编译器明白

赋值操作符和拷贝构造函数

南笙酒味 提交于 2020-02-08 11:25:33
今天在看一个消息结构的定义类时,有一个这样的接口 WF_MSG & operator=(const WF_MSG & _msg); 开始不是很明白,后来才知道这是赋值操作符,也通过这个深刻了解了赋值操作符,因为还定义了一个unsigned char * m_pMsgBuffer; /// 消息缓存指针 的指针,一般默认的赋值操作符是浅拷贝,而因为有消息缓存指针的变量,当这个消息类有两个对象时,如果一个消息赋值给另外一个消息,则会涉及到深拷贝的问题,所以要重新定义赋值操作符 这里有一博客,叙述的很详细,给大家分享下: 赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A。不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的;复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在。 CTemp a(b); //复制构造函数,C++风格的初始化 CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样 在这之前a不存在,或者说还未构造好。 CTemp a; a=b; //赋值运算符 在这之前a已经通过默认构造函数构造完成。 实例总结: 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。 以下讨论中将用到的例子: class CExample { public: CExample(){pBuffer

前端-对象-合集

寵の児 提交于 2020-02-08 06:20:30
1.对象是什么 对象是由多个键值对组成的无序的集合。对象中每个属性对应任意类型的值 2.面向对象是什么 使用对象中的属性和方法就是面向对象 3.JavaScript的本地对象有哪些 分别有什么特点 本地对象为array obj regexp等 特点是本地对象可以new实例化 4.JavaScript的内置对象有哪些 有什么特点 JavaScript常见的内置对象有 Object,Math,String,Array,Number,Function,Boolean,JSON 等 其中Object是所有对象的基类,采用了原型继承方式. 特点:内置对象不可以实例化 JavaScript的宿主对象有哪些 宿主为浏览器自带的document,window 等 5.对象-js中深拷贝和浅拷贝的区别 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。 深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存, 修改新对象不会改到原对象。 6. js深拷贝的方法有哪些: 递归拷贝 使用Object.create ( ) 方法 jquery 有提供一个$.extend也可以实现 函数库lodash,也有提供cloneDeep用来实现 7,介绍js有哪些内置对象? Object 是 JavaScript 中所有对象的父对象 数据封装类对象:Object、Array

javascript 创建对象的几种方式

安稳与你 提交于 2020-02-08 04:16:52
1. //基于已有对象扩充其属性和方法var object = new Object(); object.name = "zhangsan"; object.sayName = function(name) { this.name = name; alert(this.name); } object.sayName("lisi"); 2. //工厂方式创建对象 function get() { alert(this.username + ", " + this.password); } //让一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数 对象。 function createObject(username, password) { var object = new Object(); object.username = username; object.password = password; object.get = get; return object; } var object = createObject("zhangsan", "123"); var object2 = createObject("lisi", "456"); object.get(); object2.get(); 3. //构造函数方式 function Person() { /

黑马程序员-java基础

半世苍凉 提交于 2020-02-07 23:40:54
---------------------- ASP.Net+Unity开发 、 .Net培训 、期待与您交流! ---------------------- 面向对象的程序设计 面向过程的程序设计方法从解决问题的每一个步骤入手,适合于解决比较小的简单问题。 面向对象的程序设计方法则按照现实世界的特点来管理复 ?的事物,把它们抽象为对 象,具有自己的状态和行为,通过对消息的反应来完成一定的任务。 特点:1:将复杂的事情简单化。 2:面向对象将以前的过程中的执行者,变成了指挥者。 3:面向对象这种思想是符合现在人们思考习惯的一种思想。 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数等一些内容进行了封装。 匿名对象使用场景: 1:当对方法只进行一次调用的时候,可以使用匿名对象。 2:当对象对成员进行多次调用时,不能使用匿名对象。必须给对象起名字。 在类中定义其实都称之为成员。成员有两种: 1:成员变量:其实对应的就是事物的属性。 2:成员函数:其实对应的就是事物的行为。 所以,其实定义类,就是在定义成员变量和成员函数。但是在定义前,必须先要对事物进行属性和行为的分析,才可以用代码来体现。 private int age;//私有的访问权限最低,只有在本类中的访问有效。 总结:开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐患,所以