面向对象程序设计
八咫鸦是我的光!
菜鸟的志向!
展开
-
6.3单目运算符重载
三目运算符不能重载用成员函数形式重载运算符“++”“–”#include<iostream>using namespace std;class Counter{ public: Counter() { value=0; } Counter(int i) { value=i; } Counter operator ++(); Counter operator ++(int); Counter operator --(); Counte原创 2021-07-07 22:42:48 · 288 阅读 · 0 评论 -
类模板
同函数模板一样,使用类模板可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数以及某些成员函数的返回值能取任意类型。定义原创 2021-05-25 12:17:56 · 614 阅读 · 0 评论 -
函数模板
模板把函数或类要处理的数据类型参数化,即表现为参数的多态性。模板的概念强类型的严格性与灵活性介绍一个概念强类型语言:一旦某个变量被定义类型,若不经过强制转换,则永远是该数据类型。(在编译时即可)弱类型语言:可根据环境变化自动转换。...原创 2021-05-23 17:07:48 · 187 阅读 · 0 评论 -
(c++)运算符重载的规则
6.1运算符重载的规则运算符重载:同一个运算符由于所操作的数据类型不同而具有不同的意义,就是运算符重载。准确一点来说,运算符重载就是赋予已有的运算符多重含义6.1.1运算符重载的规则重载运算符必须符合语言语法不能重载对内部c++数据类型进行操作的运算符(例如不能重载二元浮点减法运算符)不能创建新的运算符不能重载下面的运算符:. 类成员选择运算符.*成员指针运算符:: 作用域运算符?:条件表达式运算符除此之外的运算符都可以被重载,并且只有“=”的重载函数不能被继承重载运算符要保持原原创 2021-04-27 22:23:16 · 2248 阅读 · 0 评论 -
c++5.6虚析构函数
一般只有非静态成员函数才可以说明为虚函数。析构函数也可以是虚函数(最好在动态联编时被说明为虚函数)一个类中只允许一个虚析构函数(析构函数无参数)虚析构函数的定义和使用//虚析构函数#include <iostream>using namespace std;class Base{ public: Base( ){} virtual ~Base(){cout << "Base destructor is called."<<原创 2021-04-17 11:17:41 · 108 阅读 · 0 评论 -
c++5.5纯虚函数和抽象类
纯虚函数如果不能在基类中给出有意义的虚函数的实现,但又必须让基类为派生类提供一个公共界面函数,这时可将其声明为纯虚函数。纯虚函数的定义是在虚函数定义的基础上,再让函数等于0即可(这只是一种表示形式,不是说它的返回值是0)virtual double area() const=0;,area()仅起到为派生类提供一个一致的接口作用抽象函数一个类可以说明多个纯虚函数,对于包含有纯虚函数的类被称为抽象类。一个抽象类只能作为基类来派生新类,不能说明抽象类的对象。Figure fig;//不能说明抽象类的原创 2021-04-17 11:05:10 · 218 阅读 · 0 评论 -
(c++)5.4构造函数和析构函数中调用虚函数
在构造函数和析构函数中调用虚函数时,采用静态联编(他们所调用的虚函数是自己类中定义的函数)如果在自己类中没有实现这个虚函数,则调用的是基类中的虚函数,绝不会是任何在派生类中重定义的虚函数//构造函数和析构函数中调用虚函数#include <iostream>using namespace std;class Base{ public: Base(){func1();} virtual void func1() //虚函数 {原创 2021-04-17 11:04:29 · 473 阅读 · 0 评论 -
(c++)第五章多态性和虚函数
5.1静态联编与动态联编5.2虚函数5.3成员函数中调用虚函数原创 2021-04-17 10:41:52 · 242 阅读 · 0 评论 -
(c++)4.5继承机制下的构造函数与析构函数
注意啦,在派生类的生成过程中,派生类继承基类的大部分成员,但是!!!不继承基类的构造函数(包括拷贝构造函数)和析构函数【所以需要自己手动添加啦】4.5.1继承机制下构造函数的调用顺序(告诉你咋继承基类的构造函数)方法:在定义派生类的构造函数时,除了对自己数据成员进行初始化外,还要调用基类的构造函数来初始化基类数据成员。格式就不给啦,感觉有点抽象记不住。。。。直接上例子吧(对了这还分单继承和双继承)单继承机制下构造函数的调用顺序#include<iostream>using names原创 2021-04-09 22:56:04 · 223 阅读 · 0 评论 -
(c++)4.4多继承
4.4.1多继承的定义格式直接来个例子看格式吧(当然是敲的书上的)#include<iostream>using namespace std;class Baseclass1{ public: void seta(int x) { a=x; } void showa() { cout<<"a="<<a<<endl; } private: int a;};class Baseclass2{ publi原创 2021-04-02 21:00:04 · 173 阅读 · 0 评论 -
(c++)4.3派生类的访问控制
在派生类中,存在第四种访问权限:不可访问。4.3.1公有继承赋值兼容原则:在公有继承情况下,一个派生类的对象可以作为基类的对象使用。分为以下三种情况:派生类的对象可以赋给基类的对象派生类的对象可以初始化基类的引用DerivedClass d;BaseClass& br=d;派生类的对象地址可以赋给基类的指针DerivedClass d;BaseClass * pr=&d; 后两种情况下,通过br或pr只能访问对象d中所继承的基类成员【这是由基类的类定义决定的原创 2021-04-02 20:28:38 · 246 阅读 · 0 评论 -
(c++)4.2单继承
无论哪种继承,都有公有继承、私有继承和保护继承不同的继承方式,派生类对基类成员拥有不同的访问权限。继承方式的默认情况是私有继承方式。公有继承单继承的例子:#include<iostream>using namespace std;class ...原创 2021-04-02 20:06:22 · 153 阅读 · 0 评论 -
(c++)第四章继承机制 4.1基类和派生类
4.1.1继承和派生的基本概念根据一个类创建一个新的类的过程称为继承。(也称派生)派生新类的类称为基类(父类)。派生出来的新类称为派生类(子类)可以对派生类做出如下变化:增加新的数据成员重新定义已有的成员函数增加新的成员函数改变现有成员的属性4.1.2继承的种类一个派生类可以从一个或多个基类派生。可分为单继承和多继承。...原创 2021-04-02 17:33:07 · 214 阅读 · 0 评论 -
c++3.5子对象和堆对象
3.5.1子对象1.子对象的声明一个对象作为另一个类的成员时,该对象称为类的子对象。子对象实际是某个类的数据成员。原创 2021-03-22 17:09:24 · 850 阅读 · 0 评论 -
C++3.3构造函数与析构函数
之前写的我觉得不太全面,加上我对这块知识还是不太熟所以决定重新整理这里的知识点。3.3.1构造函数用于对象的创建和初始化构造函数应该被声明为公有函数,在创建对象的时候被自动调用特点:无返回值函数名和类名相同可以重载不能被显示调用,只能被自动调用默认构造函数就是无参的构造函数,既可以自己定义,也可以是编译器自动生成。(如果已经定义了构造函数,编译系统不会自动生成默认的构造函数)示例:#include<iostream>using namespace std;//点原创 2021-03-17 12:57:05 · 132 阅读 · 0 评论 -
c++友元(笔记)
在程序里,有些私有属性,想让类外特殊的一些函数或类进行访问,这就需要用到友元的技术友元的目的就是让一个函数或者类访问另一个类中私有成员友元关键字:friend友元的三种实现全局函数做友元类做友元成员函数做友元成员函数做友元class Building{//goodGay全局函数是Building好朋友,可以访问Building中私有成员friend void goodGay(Building *budilding);public:Building(){ m_SittingR原创 2021-03-14 11:03:00 · 92 阅读 · 0 评论 -
c++this指针
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码那么问题是:这一块代码是如何区分哪个对象调用自己的呢?c++通过提供特殊的对象指针,this指针,来解决上面的问题,this指针指向被调用的成员函数所属的对象this指针是隐含每一个非静态成员函数内的一种指针this指针不需要定义,直接使用即可this指针的用途当形参和成员变量同名时,可用this指针区分在类的非静态成员函数中返回对象本身,可使用return*thisclass Person{public原创 2021-03-13 20:55:12 · 94 阅读 · 0 评论 -
c++成员变量和成员函数是分开存储的
在c++中,成员变量和成员函数是分开存储的。只有非静态成员变量才属于类的对象上class Person{};void test01(){Person p;cout<<"size of p= "<<sizeof(p)<<endl;}空对象占用内存空间为1c++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置每个空对象也有一个独一无二的内存地址class Person{ int m_A;//非静态成员变量 属于类的对象上原创 2021-03-13 20:29:01 · 252 阅读 · 0 评论 -
c++静态成员
静态成员就是在成员变量和成员函数前加上关键词static。静态成员分为:静态成员变量1.所有对象共享一份数据2.在编译阶段分配内存3.类内声明,类外初始化静态成员函数1.所有对象共享一个函数2.静态成员函数只能访问静态成员变量//静态成员变量class Person{public://1.所有对象都共享同一份数据//2.编译阶段就分配内存//3.类内声明,类外初始化操作static int m_A;private: static int m_B;};int Per原创 2021-03-13 20:08:23 · 82 阅读 · 0 评论 -
c++类对象作为类成员(笔记)
c++类中的成员可以是另一个类的对象,我们称该成员为 对象成员当其他类对象作为本类对象成员,构造时候先构造类对象,再构造自身,析构的顺序则相反class A()class B{ A a;}B类中有对象A作为成员,A为对象成员#include<iostream>using namespace std;//类对象作为类成员//手机类class Phone{public: Phone(string pName) { cout<<"Phone的构造函数运原创 2021-03-13 19:25:26 · 613 阅读 · 2 评论 -
面向对象程序设计(c++)3.3构造函数与析构函数
对象的初始化和清理构造函数(初始化操作):作用在创建对象时为对象的成员属性赋值,编译器自动调用1.没有返回值也不写void2.函数名称和类名相同3.可以有参数,可以发生重载4.程序在调用对象时会自动调用构造,而且只调用一次析构函数:作用在对象销毁前系统自动调用1.无返回值也不void2.不可以有参数,不重载这两个函数将会被编译器自动调用,完成对象初始化和清理工作。这个工作时编译器强制我们要做的事情,如果我们不提供构造和析构,编译器会提供(空实现)构造函数的分类及调用按参数分:有参构造原创 2021-03-12 21:28:43 · 161 阅读 · 0 评论 -
面向对象程序设计(c++)3.2对象
3.2.1对象的声明格式:<类名><对象名表>例子:声明类Point的对象:Point p1,p2,*pdate,p[3],&rp=p1;3.2.2对象的创建和销毁在程序运行时,通过为对象分配存储空间来创建对象创建对象时,类被用作样板,对象称为类的实例为对象分配存储空间主要有静态分配和动态分配堆对象是在程序运行时根据需要随时可以被创建或删除的对象,只有堆对象采用动态分配方式静态分配方式:在声明对象时就分配存储空间,在对象生命期结束时收回所分配存原创 2021-03-12 19:17:29 · 97 阅读 · 0 评论 -
面向对象程序设计(c++)笔记3 第三章 类与对象 3.1类
关于类:构成了实现c++面向对象程序设计的基础定义对象的属性和行为是c++封装的基本单位 c++的类就是一种用户自己定义的数据类型 c++规定,任何数据类型都必须先定义后使用,类也不例外3.1.1类的定义class 类名{ public: <公有数据和函数> protected: <保护数据和函数> private: <私有数据和函数>}; 类中定义的数据是数据成员,函数是成员函数 数据描述对象属性 函数描述对象行为原创 2021-03-12 19:07:28 · 362 阅读 · 0 评论 -
C++的多态性(笔记)
第一节课:分类:静态多态:函数的重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态。静态多态和动态多态区别:静态多态的函数地址早绑定,编译阶段确定函数地址动态多态的函数地址晚绑定,运行阶段确定函数地址#include<iostream>using namespace std;//多态//动物类class Animal{public: void speak() { cout<<"动物在说话"<<endl;原创 2021-03-10 16:37:10 · 98 阅读 · 0 评论 -
c++产生随机数
c++产生随机数,要使用rand()和srand()不过rand()它总是会返回同一随机数所以还是用srand()比较好,利用系统时钟(我也不晓得这玩意是啥),产生不同的随机数种子,不过要调用time(),而time()又需要头文件代码实现如下:#include<iostream>#include<stdlib.h>#include<ctime>using namespace std;int main(){ srand((int)time(0));原创 2021-03-07 15:40:33 · 185 阅读 · 0 评论 -
面向对象程序设计(c++)笔记2 第二章 从c到c++
第二章 从C到C++C++语言对C语言最主要的扩充是引入了面向对象的概念及相应的处理机制c++兼顾了C语言中的内容,在程序结构上与C语言相同,只是增加了类和对象2.1 c++程序基本组成c++编写的语言由函数+类组成。。。。。。感觉这部分内容不需要死记硬背,理解就好了。只有一些小知识点要注意一下,那我就不那么正式地写了,就写一些易忘的东西吧!在iostream文件中定义的所有变量、函数等都位于名字空间std中c++提供名字空间(namespace)* 来防止命名的冲突函数由语句构原创 2021-03-07 15:20:06 · 194 阅读 · 0 评论 -
面向对象程序设计(c++)笔记1第一章 面向对象程序设计概论
这篇我纯碎是写来梳理知识点的,为的是加深印象,而且这些概念我估计自己其实压根就没有掌握,只是一堆不知所云的文字罢了,所以内容肯定是干巴巴的。不过等我更深入地去了解这门课程时,我会回来补充的!!!第一章 面向对象程序设计概论1.1 程序设计方法结构化程序设计方法它是面向过程的。程序是由模块构成的,一个模块就是一个过程...原创 2021-03-06 14:38:44 · 290 阅读 · 0 评论