C++面向对象
9677
这个作者很懒,什么都没留下…
展开
-
C++多态--基本概念--原理--案例1--纯虚函数和抽象类--案例二--虚析构和纯虚析构--案例三
多态是C++面向对象三大特性之一多态分为两类静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态的区别:静态多态的函数地址早绑定-编译阶段确定函数地址动态多态的函数地址晚绑定-运行阶段确定函数地址动态多态1.有继承关系2.子类要重写父类虚函数这里的重写是要 函数名一样,函数返回类型一样,函数参数列表一样动态多态使用父类的指针或者引用,指向子类对象#include<iostream>#include<str原创 2021-02-13 13:59:23 · 246 阅读 · 1 评论 -
C++继承-基本语法--继承方式--继承同名成员处理方式--多继承语法--菱形继承
1.基本语法继承:减少重复代码语法:class 子类:继承方式 父类子类也叫派生类,父类也叫基类派生类中的成员包括两大部分一类是从基类继承过来的,一类是自己增加的成员。从基类继承过来的表现其共性,而新增的成员体现了其个性。#include<iostream>#include<string>using namespace std;class BasePage {//基类public: void header() { cout << "1" <原创 2021-02-06 21:48:33 · 558 阅读 · 0 评论 -
C++函数调用运算符重载+匿名对象
函数调用运算符()也可以重载由于重载后使用的方式非常像函数的调用,因此称为仿函数仿函数没有固定的写法#include<iostream>#include<string>using namespace std;class Myprint {public: //重载函数调用运算符 void operator()(string text) { cout << text << endl; } int operator()(int a,int原创 2021-02-04 19:35:13 · 305 阅读 · 0 评论 -
C++关系运算符重载
关系运算符==的重载#include<iostream>#include<string>using namespace std;class Person {public: Person() { } Person(string name,int age) { m_Name = name; m_Age = age; } bool operator==(Person&p) {//返回引用用来返回自身 if (this->m_Name ==原创 2021-02-04 18:33:41 · 137 阅读 · 0 评论 -
C++赋值运算符重载
C++编译器至少给一个类添加四个函数如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题原创 2021-02-04 18:20:24 · 192 阅读 · 0 评论 -
C++递减运算符重载
#include<iostream>#include<string>using namespace std;//通过全局函数重载class MyInteger { friend ostream&operator<<(ostream &cout, MyInteger m);public: MyInteger() { m_Num = 0; } //重载前置--运算符 MyInteger& operator--() {原创 2021-02-03 22:52:40 · 183 阅读 · 0 评论 -
C++递增运算符重载,另附cout输出流顺序
递增运算符++先看一下它的内置运算原理int a=10;cout<<++a<<endl//结果11cout<<a<<endl//11int b=10;cout<<b++<<endl;//10cout<<b<<endl;//11先建立一个类class MyInteger{public: MyInteger(){ m_Num=0; } private: int m_Num;}分原创 2021-02-03 22:30:39 · 310 阅读 · 0 评论 -
C++运算符重载左移运算符重载
所谓左移运算符就是cout<<这个的箭头似的运算符重载它所实现的功能为就是你类里面有两个变量,然后你想通过输出一个对象,就能一下子将这两个变量都输出出去运算符重载所注意事项1.方式:成员函数重载全局函数重载2.关键字 operator这个有点像照猫画虎一样区别就在于如果这样写void operator<<(cout)//其结果p.operator<<(cout)简化版本就是p<<cout和咱们要的结果cout<<p;方向不一原创 2021-02-03 15:44:47 · 681 阅读 · 0 评论 -
C++运算符重载---加号运算符重载
运算符重载概念:对已有的运算符重新定义,赋予其另一种功能,以适应不同的数据类型。4.5.1加号运算符重载作用:实现两个自定义数据类型相加的运算实现两个对象相加其实你自己可以写一个有这个作用的函数//通过自己写成员函数,实现两个对象相加属性后返回新对象 Person PersonAddPerson(Person &p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B + p.m_B;原创 2021-02-03 15:13:32 · 1013 阅读 · 0 评论 -
C++友元
友元的目的就是让一个函数或者类访问另一个类中私有成员友元的关键字 friend友元的三种实现全局函数做友元类做友元成员函数做友元全局函数做友元当然也可以写成引用的形式全局函数是不能访问类中的私有成员的,这时要想其能访问就要在类中将这个函数声明为友元函数friend void goodGay(Building *building);`````cpp#include<iostream>#include<string>using namespace st原创 2021-02-02 10:29:53 · 242 阅读 · 0 评论 -
const修饰成员函数
常函数:成员函数后加constvoid showPerson()const{}特性:常函数内不可以修改成员属性成员属性生命是加关键字mutable后,在常函数中依然可以修改常对象:声明对象前加const称该对象为常对象常对象只能调用常函数#include<iostream>#include<string>using namespace std;class Person {public: //this指针的本质,是指针常量,指针的指向是不可以修改的,这里指针原创 2021-02-02 10:09:13 · 218 阅读 · 0 评论 -
空指针访问成员函数
#include<iostream>#include<string>using namespace std;class Person {public: void showClassName() { cout << "this is person class" << endl; } void showPersonAge() { //报错原因:你传入的指针为空 if (this == NULL) { return;//可以用这种判断原创 2021-02-01 14:57:00 · 186 阅读 · 0 评论 -
C++this指针
this指针的用途:this指针式C++的特殊的对象指针,可以用来区分哪个对象调用的相应的代码。所以this指针指向被调用的成员函数所属对象。谁调用this就指向谁this指针是隐含每个非静态成员函数内的一种指针this指针不需要定义,直接使用即可this指针的用途:当形参和成员变量同名时,可以用this指针来区分在类的非静态成员函数中返回对象本身,可用returnthis(this是个指针,指向对象,如果加个则表示这个对象)//1.解决名称冲突#include<iostream原创 2021-02-01 14:44:41 · 79 阅读 · 0 评论 -
成员变量和成员函数是分开存储的
#include<iostream>#include<string>using namespace std;class Person {public:};void test01() { Person p; cout << "空对象所占内存空间" << sizeof(p) << endl;}int main() { test01(); return 0;}//C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象原创 2021-02-01 14:21:46 · 189 阅读 · 0 评论 -
C++类对象作为类成员
#include<iostream>#include<string>using namespace std;class Phone {public: Phone(string pname) { m_pname = pname; cout << "Phone的构造函数调用" << endl; } string m_pname;};class Person {public: Person(string name, string pn原创 2021-02-01 11:35:53 · 323 阅读 · 0 评论 -
C++初始化列表(构造函数的另一种初始化)
当时上课老师讲的另一种新写法,说知道就行,没想到它还有一个名字叫做初始化列表!Person():A(10), B(20), C(30) {};Person p;Person(int a,int b,int c):A(a),B(b),C(c){}Person p(10,20,30);原创 2021-01-30 18:29:56 · 76 阅读 · 0 评论 -
深拷贝和浅拷贝
浅拷贝:简单的复制拷贝操作浅拷贝带来的问题就是堆区的内容重复释放深拷贝:在堆区重新申请空间#include<iostream>using namespace std;class Person {public: Person() { cout << "Person默认构造函数调用" << endl; } Person(int age,int height) { cout << "Person有参构造函数调用" << endl原创 2021-01-30 14:01:27 · 168 阅读 · 0 评论 -
C++构造函数调用规则
如果写了有参构造函数,编译器就不再提供默认构造,依然提供拷贝构造要是你只写了有参构造函数,没写无参,但是你创建了对象Person p1,编译器就会报错,说没有合适的默认构造函数如果写了拷贝构造函数,那么编译器什么构造函数也不会给你提供了...原创 2021-01-29 10:44:46 · 98 阅读 · 0 评论 -
C++拷贝构造函数调用时机
1.使用一个已经创建完毕的对象来初始化一个新对象#include<iostream>using namespace std;class Person {public: Person() { cout << "Person默认构造函数调用" << endl; } Person(int age) { cout << "Person有参构造函数调用" << endl; m_Age = age; } Person(const原创 2021-01-29 10:36:04 · 218 阅读 · 0 评论 -
C++类和对象-封装 访问权限
对象具有属性和行为具有相同性质的对象可以抽象为类封装:意义:将属性和行为作为一个整体,并对其行为和属性加以控制public: 公共权限 成员 类内可以访问 类外可以访问**protected:**保护权限 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容**private:**私有权限 类内可以访问 类外不可以访问 儿子不可以访问父亲的私有内容(继承)#include<iostream>using namespace std;class Person{public原创 2020-11-14 12:29:18 · 233 阅读 · 0 评论 -
构造函数的分类和调用
按照参数分类:无参构造(默认构造)有参构造按照类型分类:构造函数拷贝函数 —把初始值对象的每个数据成员的值都复制到新建立的对象中。类名::类名(类名&对象名){ 函数体;}class Person{public: Person(Person &p);//声明拷贝构造函数 Person(int = 0,string = "张三"); void show();private: int age; string name;};Person::Person(Pers原创 2021-01-29 10:07:33 · 211 阅读 · 0 评论