C++基础
MuYanH
这个作者很懒,什么都没留下…
展开
-
指针函数,函数指针
一、指针函数指针函数是 返回指针的函数,【主体是函数】,返回值,是一个指针基本声明形式:返回数据类型 + * + 函数名 + (变量类型1,…);返回值是 int* 类型int* fun(int,int); #include<stdio.h>int* fun(int* x) //传入指针 { int* tmp = x; //指针tmp指向x return tmp; //返回tmp指向的地址}int main(){ int b =原创 2020-07-21 17:16:44 · 424 阅读 · 0 评论 -
指针数组,数组指针
指针数组:1)首先是一个数组2)数组的元素是指针。如果数组元素都是相同类型的指针,则称这个数组为指针数组。所谓相同类型的指针是说指针所指向的对象类型是相同的。一维,指针数组:指针数组中的每一个元素均为指针。ptr_array[i]; // ptr_array[i],是指第i+1个元素的指针二维,指针数组:char *ptr_array[3][3]={ {"asdx","qwer","fdsfaf"}, {"44444","555","6666"}, {"原创 2020-07-21 17:11:41 · 213 阅读 · 0 评论 -
C++类模板
类模板定义类模板由模板说明和类说明构成模板说明同函数模板,如下:template <类型形式参数表>类声明例如:template class ClassName{//ClassName 的成员函数private :Type DataMember;}类模板与函数模板的定义和使用类似,有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,我们可以通过如下面语句声明了一个类模板:template <typename T>class A{publ原创 2020-07-10 15:07:46 · 149 阅读 · 0 评论 -
C++之函数模板玩法
函数模板语法所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。函数模板定义形式由以下三部分组成: 模板说明 + 函数定义 + 函数模板调用template < 类型形式参数表 >类型 函数名 (形式参数表){//语句序列}模板说明原创 2020-07-08 09:31:59 · 142 阅读 · 0 评论 -
纯虚函数与抽象类
什么时候使用纯虚函数某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的接口,准备让子类来做具体的实现。此时,这个方法,就可以定义为“纯虚函数”, 包含纯虚函数的类,就称为抽象类。纯虚函数的使用方法用法:纯虚函数,使用virtual和 =0示例代码:#include <iostream>#include <string>using namespace std;class Shape {pu原创 2020-07-07 20:23:30 · 904 阅读 · 0 评论 -
C++多态
多态的本质形式上,使用统一的父类指针做一般性处理,但是实际执行时,这个指针可能指向子类对象,形式上,原本调用父类的方法,但是实际上会调用子类的同名方法。【注意】程序执行时,父类指针指向父类对象,或子类对象时,在形式上是无法分辨的!只有通过多态机制,才能执行真正对应的方法。虚函数的使用虚函数的定义:在函数的返回类型之前使用virtual,只在成员函数的声明中添加virtual, 在成员函数的实现中不要加virtual。虚函数的继承:如果某个成员函数被声明为虚函数,那么它的子类【派生类】,以及子原创 2020-07-07 19:09:35 · 96 阅读 · 0 评论 -
C++新特性-override
override仅能用于修饰虚函数。作用:提示程序的阅读者,这个函数是重写父类的功能。防止程序员在重写父类的函数时,把函数名写错。#include <iostream>using namespace std;class XiaoMi {public: virtual void func() { cout << "XiaoMi::func" << endl; };};class XiaoMi2 : public XiaoMi {public:原创 2020-07-07 17:57:33 · 149 阅读 · 0 评论 -
C++新特性-final
修饰类final用来修饰类,让该类不能被继承理解:使得该类终结!示例代码如下:其中XiaoMi3类不能再继承XiaoMi2类,因为XiaoMi2类已经用final修饰,将XiaoMi2类终结,不能再作为其他类的基类。class XiaoMi {public: XiaoMi(){}};class XiaoMi2 final : public XiaoMi { XiaoMi2(){}};class XiaoMi3 : public XiaoMi2 { //不能把XiaoMi2作为基原创 2020-07-07 17:40:50 · 248 阅读 · 0 评论 -
友元
友元的两种使用形式友元函数和友元类。友元函数使用全局函数作为友元函数假如已经设计好计算机类和计算机服务类,现在需要多计算机处理器进行升级,此时可以使用全局函数的友元形式实现。代码示例:Computer.h#pragma once#include <string>class Computer{public: Computer(); // 声明外部全局函数作为友元函数 friend void upgrade(Computer* computer); std::原创 2020-07-07 11:32:59 · 97 阅读 · 0 评论 -
使用虚基类和虚继承代替多重继承
多继承的缺陷例如:电话作为基类,座机类和手机类继承电话类,最后无线座机同时继承座机类和手机类,示意图如下:示例代码:#include <iostream> #include <string>#include <Windows.h>using namespace std;// 电话类class Tel {public: Tel() { this->number = "未知"; }protected: string number; /原创 2020-07-07 09:53:00 · 131 阅读 · 0 评论 -
继承与派生
继承和派生在UML中的表示假如以人类、男人类、女人类为例子。注意是“空心三角箭头”,从子类【派生的类】指向父类【被继承的类】父类,也称为“基类”。除了“构造函数”和“析构函数”,父类的所有成员函数,以及数据成员,都会被子类继承!派生和继承的实现父类:class Father{public: Father(const char*name, int age); ~Father(); string getName(); int getAge(); string descripti原创 2020-07-06 16:52:54 · 234 阅读 · 0 评论 -
C++ const使用注意事项
const数据成员的初始化方式:使用类内值(C++11支持)class Human {public: Human(); ~ Human();private: const int Age =18;};使用构造函数的初始化列表Human::Human():Age(18) { ......}(如果同时使用这两种方式,以初始化列表中的值为最终初始化结果)注意: 不能在构造函数或其他成员函数内,对const成员赋值!如果一个成员函数内部,不会修改任何数据原创 2020-07-04 19:18:22 · 162 阅读 · 0 评论 -
建模常用方式:组合与聚合
组合:举例:需求:构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存等组成。CPU芯片也使用类来表示。因此,计算机和CPU的关系是组合。CPU.h#include <string>class CPU{public: CPU(const char *brand = "intel", const char *version="i5"); ~CPU();private: std::string brand; //品牌 std::string version; //型号原创 2020-07-04 16:55:23 · 438 阅读 · 0 评论 -
C++中类的静态成员
静态数据成员:对于非const的类静态成员,只能在类的实现文件中初始化,如下示例代码。Human.hclass Human {public: ......static int getCount();private: string name = "Unknown"; int age = 28; ...... // 类的静态成员 static int count;};Human.cpp#include "Human.h" // 初始化类的静态成员int Human::c原创 2020-07-03 21:27:41 · 196 阅读 · 0 评论