首页 > 其他分享 >CPP面向对象笔记

CPP面向对象笔记

时间:2023-09-27 14:23:36浏览次数:32  
标签:name age 派生类 笔记 面向对象 Student 基类 CPP 函数

基本

属性

即在类中包含的一系列变量

方法

即在类中定义的一系列函数

Public, Private and Protected

在没有继承的情况下,privateprotected 效果相同

即都无法在类外直接访问调用

实在想要访问,加个函数就行

public 则可以随意访问调用

static

仅与类的整体全局有关

不受具体哪个对象的影响

const

放在函数参数后面,函数体之前

即宣称不进行修改

构造与析构

构造函数

c++ class 中,不能直接为属性赋初始值

于是,我们可以使用构造函数进行初始化

构造函数可以分为无参和有参的两种

如果在创建时不传入参数,那么就会默认进行前者

class Student{
    string name;
    int age;
    Student(){age=0;name="Shitman";}
    Student(string uname,int uage){age=uage;name=uname;}//重载
};
int main(){
    Student stu;
    Student stu(name,age);
    Student *p=new Student(name,age);//支持析构
}

析构函数

算法竞赛中,没b用

但是实际的项目中,内存不是能随便挥霍的

所以及时销毁也是有必要的

class Student{
    string name;
    int age;
    Student(){age=0;name="Shitman";}
    Student(string uname,int uage){age=uage;name=uname;}//重载
    ~Student(){}
};
int main(){
    Student stu;
    Student stu(name,age);
    Student *p=new Student(name,age);//支持析构
    delete p;//自动调用析构函数
}

继承

基类&派生类

派生类可以具有基类中公开的属性与方法

基类可以有多个派生类

继承方式

继承的方式有三种:

  • 公有继承,即基类中的 public 部分在派生类中也是 publicprotected 部分也是 protectedprivate 的部分不能继承
  • 保护继承,即基类中的 public 部分在派生类中变成 protectedprotected 部分也是 protectedprivate 的部分不能继承
  • 私有继承,即基类中的 public 部分在派生类中变成 privateprotected 部分变成 privateprivate 的部分不能继承
class Student{
public:
    int age;
    int score;
    string name;
    Student(){
        name="Unknown";
        score=0;
        age=0;
    }
    Student(int uage,int uscore,string uname){
        name=uname;
        score=score;
        age=uage;
    }
    bool operator <(const Student &stu){
        return age==stu.age?score<stu.score:age<stu.age;
    }
    void print(int uage,int uscore,string uname,string uplan,string utype){
        cout<<uname<<" is a "<<uage<<"-yeasr-old "<<utype<<", his "<<uplan<<" score is "<<uscore<<endl;
    }
    int getAge() const{return age;}
    int getScore() const{return score;}
    string getName()  const{return name;}
    virtual void _Read() =0;
};
class Undergraduate : public Student{
public:
    string plan;
    Undergraduate(){
        plan="CPP Programing";
    }
    Undergraduate(int uage,int uscore,string uname,string uplan):Student(uage,uscore,uname){
        plan=uplan;
    }
    virtual void _Read(){
        print(getAge(),getScore(),getName(),plan,"Undergraduate");
    }
};
class Postgraduate : public Student{
public:
    string plan;
    Postgraduate(){
        plan="Deep Learning";
    }
    Postgraduate(int uage,int uscore,string uname,string uplan):Student(uage,uscore,uname){
        plan=uplan;
    }
    virtual void _Read(){
        print(getAge(),getScore(),getName(),plan,"Postgraduate");
    }
};
class Juniors : public Student{
public:
    string plan;
    Juniors(){
        plan="Office 365";
    }
    Juniors(int uage,int uscore,string uname,string uplan):Student(uage,uscore,uname){
        plan=uplan;
    }
    virtual void _Read(){
        print(getAge(),getScore(),getName(),plan,"Juniors");
    }
};

派生类的构造函数

创建派生类,如果派生类没有自己的构造函数,那就会调用基类的

如果有自己的,也会先调用基类的构造函数(无参数)

那么如何既调用派生类有参数的构造函数又调用有参数的基类构造函数呢?

见上述代码

重载,多态(虚函数)

重载

重载可以重载函数,重载运算符

本质上,重载是发生在编译器中的

即,编译器不认为你的参数不同的同名函数是一个函数

它当成两个函数处理的

例子见上述代码

虚函数

基类和派生类中的同名函数

要加上 virtual

这就是多态

当你调用一个虚函数,系统会在虚函数表中找到你要调用的,这是发生在运行中

抽象类

即基类不能用来创建对象

对象只能由派生类创建

通过纯虚函数产生抽象类

类的指针

对于抽象类,可以通过基类的指针,指向派生类的对象

对于一般类,访问公开的基类的属性并不会报错,但是如果访问派生类的则会报错,这很好理解

与一般类不同的是,通过虚函数实现多态的类,可以由该指针直接调用各自的虚函数

隐藏

似乎是没啥用的

对于派生类和基类中的同名函数

如果对于派生类直接调用,那么基类中的就相当于被隐藏

标签:name,age,派生类,笔记,面向对象,Student,基类,CPP,函数
From: https://www.cnblogs.com/Illyasviel/p/17732609.html

相关文章

  • 动态规划——矩阵优化DP 学习笔记
    动态规划——矩阵优化DP学习笔记前置知识:矩阵、矩阵乘法。矩阵乘法优化线性递推斐波那契数列在斐波那契数列当中,\(f_1=f_2=1\),\(f_i=f_{i-1}+f_{i-2}\),求\(f_n\)。而分析式子可以知道,求\(f_k\)仅与\(f_{k-1}\)和\(f_{k-2}\)有关;所以我们设矩阵\(F_......
  • Java面向对象概念详解
    对象对象有两个层次的概念,现实生活中对象指的是可观世界的实体;而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。可以将现实生活中的对象经过抽象,映射为程序中的对象,对象是对现实的高度抽象。类对象在程序中是通过一种抽象数据类型来描述......
  • 面向对象编程的六大原则个人总结(附代码)
    面向对象编程的六大原则个人总结(附代码)目录面向对象编程的六大原则个人总结(附代码)一、什么是单一职责原则?核心思想好处代码示例总结二、什么是里式替换原则?规则代码示例总结三、什么是迪米特法则?核心思想规则代码示例总结四、什么是开闭原则?理解代码示例总结五、什么是依赖倒......
  • Vue2.0 浅学笔记
    Vue是框架,也是生态。1.VueAPI风格选项式(Vue2)组合式(Vue3)2.入门node.js版本大于153.创建项目创建项目npminitvue@latest开发环境VScode+Volar4.基本语法1.文本插值仅能使用单一表达式使用JavaScript表达式每个绑定仅支持单一表达式,也就是一段能够被求值的J......
  • EMQX学习笔记:命令行工具
    本文更新于2023-02-28,使用EMQX4.4.3。目录emqxemqx_ctlemqx官方文档:https://www.emqx.io/docs/zh/v4.4/getting-started/command-line.htmlemqxconsole:控制台模式。emqxrestart:重启EMQX。emqxstart:启动EMQX。emqx_ctl官方文档:https://www.emqx.io/docs/zh/v4.4/adva......
  • MMU复习--Apple的学习笔记
    一,前言以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习......
  • MMU复习--Apple的学习笔记
    一,前言以前看过MMU,因为这是单片机OS中没有的,当时我记得理解的不是很清晰,包括MMU中哪部分是硬件的,哪部分是软件的都没有太搞清楚。由于看了一个自己写linux操作系统的视频,里面有介绍MMU,且演示了虚拟地址和物理地址的转换,此时我才深刻的理解了,所以在看qemu源码的内存管理前,我先复习下......
  • JavaSE day01【复习回顾面向对象基础、继承、抽象类】测评
    选择题题目1(单选):下列关于Java中类与类之间的关系描述正确的是()选项:​ A.Java中类与类属于多继承,还可以多层继承​ B.Java中类与类属于实现关系,可以单实现也可以多实现​ C.Java中类与类属于实现关系,可以只能单实现​ D.Java中类与类属于单继承,......
  • 《Java编程思想第四版》学习笔记31--关于Externalizable
    //:Blip3.java//Reconstructinganexternalizableobjectimportjava.io.*;importjava.util.*;classBlip3implementsExternalizable{inti;Strings;//NoinitializationpublicBlip3(){System.out.println("Blip3Constructor");//s,inoti......
  • JMockit学习笔记
    1基本概念1.1常用注解@Mocked:被修饰的对象将会被Mock,对应的类和实例都会受影响(同一个测试用例中)@Injectable:仅Mock被修饰的对象@Capturing:可以mock接口以及其所有的实现类@Mock:MockUp模式中,指定被Fake的方法1.2常用的类Expectations:期望,指定的方法必须被调用StrictExpectati......