类的成员函数

JS原型,原型链,类,继承,class,extends,由浅到深

我与影子孤独终老i 提交于 2019-12-03 12:19:33
一、构造函数和原型 1、构造函数、静态成员和实例成员 在ES6之前,通常用一种称为构造函数的特殊函数来定义对象及其特征,然后用构造函数来创建对象。像其他面向对象的语言一样,将抽象后的属性和方法封装到对象内部。 function Person(uname, age) { this.uname = uname; this.age = age; this.say = function() { console.log('我叫' + this.uname + ',今年' + this.age + '岁。'); } } var zhangsan = new Person('张三', 18); zhangsan.say(); //输出:我叫张三,今年18岁。 var lisi = new Person('李四', 20); lisi.say(); //输出:我叫李四,今年20岁。 在创建对象时,构造函数总与new一起使用(而不是直接调用)。new创建了一个新的对象,然后将this指向这个新对象,这样我们才能通过this为这个新对象赋值,函数体内的代码执行完毕后,返回这个新对象(不需要写return)。 构造函数内部通过this添加的成员(属性/方法),称为实例成员(属性/方法),只能通过实例化的对象来访问,构造函数上是没有这个成员的。 >> Person.uname undefined

C++对bool operator < (const p &a)const的运算符重载详解

让人想犯罪 __ 提交于 2019-12-03 06:22:53
struct node { //定义一个结构体node(节点) int x; int y; int len; //node中有3个成员变量x,y,len bool operator <(const node &a)const {//重载<操作符。可以对两个node使用<操作符进行比较 return len<a.len; } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! Return Top 重载运算符的介绍 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。   运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: <返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }  运算符重载时要遵循以下规则: (1) 除了类属关系运算符"."、成员指针运算符".*"、作用域运算符

c++ 在类函数后加const的意义

浪尽此生 提交于 2019-12-02 17:08:59
我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性, 已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理 。 const成员函数和const对象 实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。 1、非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误) 2、表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用); 3、唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用 char getData() const{ return this->letter; } c++ 函数前面和后面 使用const 的作用: 前面使用const 表示返回值为const 后面加 const表示函数不可以修改class的成员 请看这两个函数 const

第16课类的真正形态

隐身守侯 提交于 2019-12-02 16:57:44
类的真正形态(上) 问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了。 在C语言中,struct中 是不能定义成员函数的 ,你如果实在想用成员函数,只能 定义成函数指针的形式 。这种方式在内核中太普遍了。 struct 在C语言中已经有了自己的含义,因此C++也得必须继续兼容,但是在兼容的基础上又有了改进,比如说可以定义成员函数了。 在C++中提供了新的关键字class用于类定义 class和struct的用法是完全相同的 class和struct有什么本质区别? 在用struct定义类时,所有成员的 默认访问级别为public 在用class定义类时,所有成员的 默认访问级别为private struct A {   //default to public   int i;   //default to public   int getI()   {     return i;   } }; class A {   //default to private   int i;   //default to private   int getI()   {     return i;   } }; 好的习惯:不管是用class定义类,还是用struct定义类,必须显示的指明成员变量和成员函数的访问级别。 类的真正形态 (下) 小实例 需求

类的定义与对象的创建.

早过忘川 提交于 2019-12-02 15:03:08
类的定义与对象的创建 1.实验目的 (1)理解并学会使用类,并创造合适的对象 (2)掌握在什么场景下需要使用 类 2.实验内容 类的定义、类成员的访问控制、对象、类的成员函数 3.实验过程 3.1类和对象 Part1.应用场景 类是面向对象程序设计方法的核心,利用类可以实现对数据的封装和隐蔽。 在面向对象程序设计中,程序模块是由类构成的。类是对逻辑上相关的函数与数据的封装,它是对问题的抽象描述。 Part2.定义及代码 3.1.1类的定义 class 类名称 { public: 外部接口 protected: 保护型成员 private: 私有成员 }; 其中,public、protected、private分别表示对成员的不同访问控制权限。 注意:在类中可以只声明函数的原型,函数的实现(即函数体)可以在类外定义。 例: 时钟类 class Clock{ public : void setTime(int newH,int newM,int newS); void showTime(); private: int hour,minute,second; }; 这里封装了时钟的数据和行为,分别称为Clock类的数据成员和函数成员。 3.1.2类成员的访问控制 类的成员包括 :数据成员、函数成员。分别描述问题的属性和行为,是不可分割的两个方面。 访问控制属性 (3种):公有类型

php类成员函数二次定义,动态定义类成员函数

和自甴很熟 提交于 2019-12-02 14:12:32
这是一个很怪异的想法:class类定义之后,甚至编译载入内存之后,还有没有办法增加其成员函数,改写其已有成员函数逻辑!意义不是特别大,只是觉得很有意思, php太神奇了!!! 【应用场景】 1) 动态载入类成员函数体(一些常住内存框架,修改的代码需要重载服务,可以动态多次载入扩展函数文件) 2) 团队开发写同一个类文件的避免冲突,自己单独可以一个扩展文件; 3) 一个类的代码太多太多,将一些成员函数分解到多个文件中实现; 4) php类运行中按需加载成员函数体内容; 【实现原理】 用类的静态变量来保存扩展的函数,用__call魔术方法来实现扩展函数的真实调用; 【例子】 <?php # # 定义一个user类 # class user{ static $funcs=array(); #用于动态扩展或覆盖类的成员函数名及函数体 static function ext($method,$func){self::$funcs[$method]=$func;} //调用一个不存在的方法 function __call($func, $args) { //可以考虑根据函数名载入定义文件 user.ext.{func}.php if(isset(self::$funcs[$func])){ $classFunc=self::$funcs[$func]; array_unshift($args,

类的继承和派生(自我总结)

南笙酒味 提交于 2019-12-02 06:48:05
在派生类中: 无论是哪种继承都 不可以直接访问 上一级类继承下来私有成员 不可以直接访问 public protected 对于protect和public则根据继承方式的不同而不同, 继承方式的不同限制的是派生类对象对基类的访问 。 在派生类内部中: 无同名函数 可以访问除开基类私有成员的任何成员 有同名函数(同名就行) 派生类中的同名函数隐藏基类中的同名函数 可以通过类名::函数进行区分 可能会引发二异性(继承来的函数同名[同一等级]) protected继承与private继承的差别: protected不会继承到没有 —— private会继承到不能访问 只继承一次是看不出来差距的 类型转换 公有派生类对象(public方式) 可以被当作基类的对象使用,反之则不可以. 公有派生使得基类的对外访问接口是不变的 派生类的对象可以隐含转换为基类对象; 派生类对象可以初始化基类的引用 派生类的指针可以隐含转换为基类的指针 通过基类对象名、指针只能使用从基类继承的成员 不要重新定义继承而来的非虚函数 ,使得同名函数被覆盖掉,使用虚函数更加满足多态需求 派生类不能继承的基类成员 缺省构造函数,拷贝构造函数,拷贝赋值函数,以及析构函数这四种成员函数被称作特殊的成员函数 构造函数 未继承基类构造函数,那么使用派生类构造函数进行统一初始化 C++11规定: 可用using

类的多态

此生再无相见时 提交于 2019-12-02 06:47:59
运算符重载 不能重载的运算符 类属关系运算符“.” 成员指针运算符“.*” 作用域分辨符“::” 三目运算符“?:” 重载运算符 重载运算符函数必须要有重载的类在参数里面 成员重载运算符 调用时,必须是类对象进行调用,且会将自己自动传入做 this 双目运算符操作时,该类对象必须出现在左边,以进行调用 单目运算符操作时,int有是后置++/--,无是前置++/-- 非静态成员 #include using namespace std; class Clock { public: Clock(int hour = 0, int minute = 0, int second = 0); void showTime() const; Clock &operator++(); //前置单目运算符 Clock operator++(int); //int用于区分前置还是后置运算符 后置单目运算符 private: int hour, minute, second; }; void Clock::showTime() const{ cout 非成员运算符 用来解决调用对象不是类对象的情况(但参数还是要有类对象存在) 非成员 #include using namespace std; //非成员函数解决"复数+类"的情况,成员的运算符重载只能做到第一个参数是类类型的 class Complex

实现CStack类遇到的问题

浪尽此生 提交于 2019-12-02 00:26:28
自己动手编写一个CStack类,包括头文件CStack.h以及源文件CStack.cpp。 遇到了几个问题: 1.每个文件都要写using namespace std;没写的文件会报错:缺少类型说明符……(这不是废话吗。。可是我就是这样报错许久。。。) 2.class CStack的定义放在.h中,在.cpp文件中不能再重复该定义,否则编译会报错(class重复定义)。.cpp文件只要包括class中的各个未定义成员函数的定义即可。 3.在class定义中定义的成员函数默认是inline函数(即使不显示声明inline)。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。如果不会在多个源文件中用到,则 class中未定义的成员函数(即.h文件中只声明且没有显示声明inline的成员函数)也可以在.cpp文件中定义的时候加上inline,或者声明和定义时都加上inline都可以(即可以正常编译及运行)!但是还是建议将inline函数的定义放在头文件中。 先上代码: CStack.h: #pragma once //保证头文件只被编译一次 #include <vector> #include <string> using namespace std; class CStack { public: CStack(void); ~CStack(void);

C++学习-类和对象(1)

試著忘記壹切 提交于 2019-12-01 18:27:38
一、结构化程序设计 1、解决问题的方式(复杂的大问题-》层层分解模块化-》若干的子问题) 2、自顶往下,逐步求精(程序=变量+算法,程序=数据结构+算法) 二、面向对象的程序设计(程序=对象+对象+。。。) 三、小结: 1、C语言,程序由一个一个函数组成,是结构化面向过程的编程的方法。 2、C++是面向对象的程序设计,编写的程序由对象组成。 3、面向对象的四大属性:抽象、封装、继承、多态。 一、类的定义 类是对现实生活中相似事物的抽象(类定义包括两个部分数据(相当于属性),和对数据的操作(相当于行为))--(数据的类型) 二、类和对象的关系 类是对象的封装,对象是类的实例 三、类的使用 1、定义类:数据成员和函数成员 2、实现类:定义类的成员函数,配合实现类的接口对外提供的功能 3、使用类:声明变量,调用接口 四、类的定义的基本的形式 class 类名 { private: 私有变量和函数 protected: 保护变量和函数 public: 公共的变量和函数 }; 五、class和struct的区别 六、C++类的实现: 类的实现就是定义其成员函数的过程,具体通过以下两个方式来实现: 1、在类定义的同时完成成员函数的定义 2、在类定义的外部完成成员函数的定义 返回值类型 类名::成员函数名(参数列表) { 函数体; } 其中返回类型