之前

变量型指针可以隐式转换成常量型指针
也就是说一般指针可以转换成const char *,但是const char *不能转换成一般指针

char *p = "abc"  // 会报错
char a[100] = "kkk"
const char *m = a;  // 这种是可以的

不涉及深拷贝的类不用写拷贝构造函数,系统会自动生成
运算符重载,入口参数一律认为是右值
做连等号的重载需要有返回值,不能用void

关于临时变量

临时变量通常被认为是不可修改的常量,也就是带const的,如果传给变量,会报错

v1.func(v1+v2);

这里,v1+v2会先产生一个临时变量=v1+v2,然后将值给到func(),临时变量在;结束的时候被销毁;
临时变量也会产生构造函数
如果编不过,可以加强制类型转换

func(& that)  // 这里that是个引用,所以不涉及到临时变量的创建和销毁

单例模型

构造函数和析构函数都在protected里面,外部无法调用,public只有一个静态指针返回到构造函数,也就是说,整个类里面,只有一个公有的静态方式获取到实例,这种模型称为单例模型
头文件

//例如
class studentceator
{protected:studentceator();~studentceator();
public:static studentceator* getinstance();
};

函数体

//例如
#include"single_mod.h"
studentceator::studentceator()
{}
studentceator::~studentceator()
{}
studentceator* studentceator::getinstance()
{static studentceator* m_pinstance = nullptr;if (m_pinstance == nullptr){m_pinstance = new studentceator();}return m_pinstance;
}

调用

//例如
#include"single_mod.h"
int main()
{studentceator* p = studentceator::getinstance();
}

继承

公有继承

默认公有继承,也就是public继承
B是A的子类,则默认B继承A所有public和protected接口,在A中是public则B中也是public,在A中是protected,则在B中也是protected
构造函数,先调基类A的构造函数,再调子类B的构造函数
析构函数,先调子类B的析构函数,再调基类A的析构函数

//例如
class A
{public:A() { m_data = 0; cout << "A的构造函数"<<"\n"; };~A(){ cout << "A的析构函数" << "\n"; }void setdata(int b) { m_data = b; };int getdate() { return m_data; }
protected:int m_data;
};
class B : public A  // 公有继承
{public:B() { cout << "B的构造函数" << "\n"; };~B() { cout << "B的析构函数" << "\n"; };int adddata(int a) { return m_data += a; };
protected:
};int main()
{B b;b.adddata(5);b.adddata(3);cout << b.getdate() << "\n";
}
//显示
A的构造函数
B的构造函数
8
B的析构函数
A的析构函数

私有继承

基类A的public全都变成B的private
A的private在B中直接不可访问

//例如
class A
{public:A() { m_data = 0; cout << "A的构造函数"<<"\n"; };~A(){ cout << "A的析构函数" << "\n"; }void setdata(int b) { m_data = b; };int getdate() { return m_data; }
protected:int m_data;
};
class B : private A  // 私有继承
{public:B() { cout << "B的构造函数" << "\n"; };~B() { cout << "B的析构函数" << "\n"; };int adddata(int a) { setdata(getdate() + a); };
protected:};int main()
{B b;b.adddata(5);b.adddata(3);cout << b.getdate() << "\n";  //不可调用
}

保护继承

基类的public和protected成员:都以protected身份出现在派生类中;
基类的private成员:不可直接访问

私有继承应用

has-a逻辑
私有继承可以写成组合的方式

多重继承

//例如
class anmal
{public:anmal() { cout << "这是anmal"<<"\n"; };~anmal(){  }void shout() { cout << "叫啥" << "\n"; };
protected:
};class sheep : public anmal
{public:sheep() { cout << "这是sheep" << "\n"; };~sheep() {  };void shout() { cout << "咩"<<"\n"; };
protected:};class camel : public anmal
{public:camel() { cout << "这是camel" << "\n"; };~camel() {  };void shout() { cout << "哞" << "\n"; };
protected:};class yangtuo : public sheep, camel  // 菱形继承
{public:yangtuo() { cout << "这是yangtuo" << "\n"; };~yangtuo() {  };void shout() { cout << "阿巴阿巴" << "\n"; };void shout2() { sheep::shout(); camel::shout(); };
protected:};
int main()
{sheep sheep;sheep.shout();  //子类和基类有相同名称的方法,子类会重写基类的方法,yangtuo yt;yt.shout();yt.shout2();

对于菱形继承,会从左到右,先运行,左边基类的基类的构造函数,再运行左边基类的构造函数,然后是右边基类的基类的构造函数,和右边基类的构造函数
一个类继承多个类的时候,如果调用相同名称的函数,一定要写清调用哪个类中的函数否则会报错
菱形继承,多个类继承一个类的时候,从分开的时候,内存占用就彻底分开了

//显示
这是anmal
这是sheep
咩
这是anmal
这是sheep
这是anmal
这是camel
这是yangtuo
阿巴阿巴
咩
哞

【漫漫转码路】Day 39 C++ day10相关推荐

  1. 快速开发趣事:我与小白妹纸的漫漫撸码路

    快速开发趣事:我与小白妹纸的漫漫撸码路 最近,活儿又来了,真是屋漏偏逢连阴雨,经过半年的洗礼能用得上的开发就我一个人了,怎么办呢,唉呀妈呀,脑壳疼脑壳疼- 这不,老总又要找我开会了. "小王 ...

  2. 【漫漫转码路】Day 28 C++ day01

    C++ 环境 编译器:Visual Studio 安装好之后在工具-获取工具和功能,除系统默认的外,再勾选这些 仅限windows10系统 然后在文件-新建-项目-控制台应用-下一步 可以看到搭建完成 ...

  3. 【漫漫转码路】Python Day 03

    一.字符串格式化 为了使输入与输出实现互动,常常会用到格式化的方法: 1.传统格式化方法 传统格式化方法通过占位符,即"%+特定字符"的方式实现,百分号%后面的不同字符代表不同的作 ...

  4. 【漫漫转码路】Python Day 07

    运算符 一.算术运算符 运算符 作用 + 加 - 减 * 乘 / 除 // 整除 % 取余 ** 幂 # 例如 a = 2 b = 3 print(a+b) print(a-b) print(a*b) ...

  5. 【漫漫转码路】Day 38 C++ day09

    面向对象 正常结构体无法改变成员变量的内存,可能出现内存浪费或内存不足,长度超出,内存泄漏等问题 为了避免这种问题, 类class 类定义的形式 class classname {promission ...

  6. 【漫漫转码路】Python Day 16

    一.面向对象属性的函数 1.delattr delattr(object,name):删除object的属性name(此处可以是类属性,也可以是实例属性) 2.getattr getattr:(obj ...

  7. 【漫漫转码路】Python Day 15

    一.类 类包括属性和功能(方法),在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法了. 1.类的创建 类用class创建,后面的类名通常首字母大写, # 类对象 c ...

  8. 【漫漫转码路】Python Day 04

    一.列表对象方法 1.list.append(x) list.append(x):在列表末尾添加一个数据,修改原数据,无返回值: # 例如 list1 = [0, 1, 2, 3, 4] list1. ...

  9. 【漫漫转码路】Python Day 05

    一.字典对象方法 1.keys/values/items dict.keys():获取字典dict中的所有键,并以列表形式存放,返回视图: dict.values():获取字典dict中的所有值,并以 ...

最新文章

  1. 大数运算(7)——大数阶乘(求阶乘)
  2. node+Mysql,数据库时区显示正确,查询时却显示另一个时区
  3. Jquery 温习,温故而知新,可以为师矣
  4. 在SAP WebIDE Database Explorer里操作hdi实例
  5. PEACHPIE 0.9.11 版本发布,可以上生产了
  6. 【报告分享】2020年数字政府新基建发展白皮书.pdf(附下载链接)
  7. 17.3.10--关于C元的变量类型所占字节问题和类型转化
  8. C++中const使用总结
  9. 现金流量表的编制 (by shany shang)
  10. 【博学谷学习记录】超强总结,用心分享 | 【Lunux】Manjaro手动升级icu依赖库安装MySQL以及Navicat
  11. 算术右移 java_Java 中 算术右移和逻辑右移有什么区别?
  12. Python爬取天天基金网历史数据
  13. 电巢:继腾讯与联通混改后,又有两家企业官宣,科技巨头与国企混改,意味着什么?
  14. 【JZOJ1502】骑士精神
  15. 随机抽奖系统 Random类
  16. 艺赛旗RPA开发技巧-巧用css selector
  17. 决策智能概念里的风起云涌
  18. Jmeter:使用代理录制安卓手机APP性能测试脚本
  19. formvalidator4.1.3下载,formvalidator4.1.3下载地址,formvalidator4.1.3最新下载地址【蕃薯耀分享】
  20. Go语言自学系列 | golang关键字continue

热门文章

  1. Python文件读写代码
  2. Spring Boot整合ActiveMQ及场景举例(点对点模式、订阅模式)
  3. Games104 Lecture 12 游戏引擎中的粒子和声效系统
  4. 《数据结构》-图的六度空间理论(二)
  5. 零基础从零开始写VO视觉里程计
  6. 【线性代数04】投影矩阵P和标准正交矩阵Q
  7. 鸿蒙系统车联网,华为鸿蒙上车,关于车联网的想象有多少?
  8. python看网络电视
  9. python读取邮件发送日期和时间_Python获取邮件的日期时间Gmai
  10. 记一次rsyslog日志记录失败的解决过程