当前位置: 首页 > news >正文

C++的基础知识(引用、类、封装、继承、多态、函数重载)

C++的基础知识

  • 1、前言
  • 2、引用
    • 2.1 引用的概念
    • 2.2 引用与指针的区别
  • 3、封装
  • 4、C++的类
    • 4.1 什么是类和对象
    • 4.2 类的访问限制
    • 4.3 类的继承
      • 4.3.1 public继承
      • 4.3.2 protected继承
      • 4.3.3 private继承
  • 5、多态
    • 5.1 多态的实现
  • 6、函数重载
  • 7、总结

1、前言

记录一下C++的一些基础知识,方便自己日后回顾,也可以给有需要的人提供帮助。

2、引用

2.1 引用的概念

引用就是给变量起别名,引用必须在声明时初始化
int main()
{int a = 1;int &b = a;     //b是a的别名,引用声明的时候必须初始化cout << b << endl;cout << a << endl;return 0;
}

2.2 引用与指针的区别

1. 引用无空值(不能为NULL),指针可以;

2. 引用初始化后不可更改,指针可重新指向;

3. 支持多级指针,不支持多级引用;

4. 无需解引用操作符。

3、封装

封装就是将数据(成员变量)和操作数据的方法(成员函数)绑定在一起,并隐藏

(private)内部实现细节,重新提供外部访问接口进行访问。
#include <iostream>using namespace std;//定义一个银行类
class BankAccount{//封装封装敏感数据
private:string owner;       //账户double balance = 0.0;     //余额// 暴露安全操作接口
public:// 添加构造函数,初始化 balance 为 0.0BankAccount() : balance(0.0) {}//设置账户名void setOwner(const string& o){owner = o;cout << "重置用户名成功,当前用户名为:" << o << endl;}//取款void deposit(double amount){balance += amount;cout << "存款成功,当前余额为:" << balance << endl;}};
int main()
{BankAccount ba;ba.setOwner("叶子");ba.deposit(10.21);return 0;
}

在这里插入图片描述

4、C++的类

4.1 什么是类和对象

类是创造对象的模板,对象是类的定义出来的变量;

类的成员不但可以是变量,还可以是函数;

一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程叫类的实例化。
//定义一个狗类
class Dog{
public:string name;int age;//函数void run(){cout << "小狗会跑" << endl;};
protected:double weight;
private:string color;
};
int main()
{//在栈上创建对象Dog dog1;//在堆上创建对象Dog *dog2 = new Dog();return 0;
}

4.2 类的访问限制

访问权限特点
public成员无访问限制
protected成员在派生类中可访问
private成员只能在类内部访问
//定义一个狗类
class Dog{
public:string name;int age;//函数void run(){cout << "小狗会跑" << endl;};//公有方法可以访问保护和私有成员void setColor(const string &c){color=c;}
protected:double weight;
private:string color;
};//狗类的派生类
class xiaohei:public Dog{void setWeight(){weight = 20;    //可以访问基类的 protected 成员}void setColor(){//color = "黑色";  //错误,基类的私有成员在派生类中不可访问};
};
int main()
{//在栈上创建对象Dog dog1;dog1.name = "小黑";       //公有成员可访问//dog1.weight = 20;        //错误,保护成员不能在类外直接访问//dog1.color = "黑色";      //错误,私有成员不能在类外直接访问//在堆上创建对象Dog *dog2 = new Dog();dog2->setColor("黑色");   //通过公有方法间接设置私有成员return 0;
}

4.3 类的继承

继承方式基类public成员基类protected成员基类private成员外部代码
public在派生类中仍为 public在派生类中为 protected不可访问只能访问派生类的 public 成员
protected在派生类中变为 protected在派生类中仍为 protected不可访问无法直接访问基类成员
private在派生类中变为 private在派生类中变为 protected不可访问无法直接访问基类成员

4.3.1 public继承

//创建一个动物基类
class Animal{
public:int age;void setAge();
protected:double weight;void setWeight();
private:string color;void setcolor();
};//创建一个狗类继承动物基类
class Dog : public Animal{
public:/*age = 10;错误,不能直接在类作用域内赋值操作*/void setPropetry(){age = 10;          //允许访问基类 public 成员weight = 20;       //允许访问基类 protected 成员//color = "黑色";   //错误:基类 private 成员不可访问setAge();          //允许调用基类 public 方法setWeight();       // 允许调用基类 protected 方法//setcolor();       错误:基类 private 方法不可访问}
//外部代码无法调用
protected:void setPropetry2(){age = 100;weight = 200;//color = "白色";}};int main()
{Dog dog1;dog1.age;//dog1.weight;              //错误,基类的protected成员在派生类中为protected,外部代码无法访问//dog1.setPropetry2();        //错误,外部代码无法调用 protected 成员 return 0;

4.3.2 protected继承

//protected继承
class Cat : protected Animal{
public:void setPropetry(){age = 2;                 //基类 public 成员变为 protectedweight = 100;           //基类 protected 成员仍为 protected//color = ""白色";      //错误:基类 private 成员不可访问setAge();              //允许调用基类 public 方法(变为 protected)setWeight();           //允许调用基类 protected 方法//setcolor();           //错误,基类 private 方法不可访问}
};int main()
{//public派生类实例化Dog dog1;dog1.age;//dog1.weight;              //错误,基类的protected成员在派生类中为protected,外部代码无法访问//dog1.setPropetry2();        //错误,外部代码无法调用 protected 成员 //protected派生类实例化Cat cat;//cat.age;            //错误,基类 public 成员在派生类中变为 protected//cat.setAge();         //错误,基类 public 方法在派生类中变为 protectedreturn 0;
}

4.3.3 private继承

//private继承
class Duck : private Animal{
public:void setPropetry(){age = 3;                // 基类 public 成员变为 privateweight = 30;           // 基类 protected 成员变为 private//color = "黄色";      // 错误:基类 private 成员不可访问setAge();              //允许调用基类 public 方法(变为 protected)        }
};int main()
{//public派生类实例化Dog dog1;dog1.age;//dog1.weight;              //错误,基类的protected成员在派生类中为protected,外部代码无法访问//dog1.setPropetry2();        //错误,外部代码无法调用 protected 成员 //protected派生类实例化Cat cat;//cat.age;              //错误,基类 public 成员在派生类中变为 protected//cat.setAge();         //错误,基类 public 方法在派生类中变为 protectedreturn 0;//private继承Duck duck;//duck.age;             // 错误:基类 public 成员在派生类中变为 private//duck.setAge();        // 错误:基类 public 方法在派生类中变为 private
}

5、多态

多态就是通过统一的接口操作不同类型的对象。

5.1 多态的实现

1. 基类定义虚函数(virtual 关键字)

2. 派生类重写虚函数(override 关键字)

3. 通过基类指针或引用调用虚函数,触发动态绑定
#include <iostream>using namespace std;class Animal{
public://创建虚函数virtual void speek(){cout << "Animal sound" << endl;};virtual ~Animal() {}  // 虚析构函数
};class Dog : public Animal{
public://重写虚函数void speek() override{cout << "wang" << endl;}
};
class Cat : public Animal {
public://重写虚函数void speek() override{cout << "mi" << endl;}};
int main()
{Animal *animal1 = new Dog();Animal *animal2 = new Cat();animal1->speek();       //调用wanganimal2->speek();       //调用midelete  animal1;delete  animal2;return 0;
}

6、函数重载

函数重载就是函数名称相同,但这些函数的参数列表不同(参数类型、参数个数或参数顺序不同)
int add(int a, int b){return a+b;
}int add(int a, int b, int c){return a+b+c;
}double add(double a, double b){return a+b;
}int main()
{cout << add(1,2) << endl;           //调用 int add(int, int)cout << add(2,3,4) << endl;         //调用 int add(int, int, int)cout << add(1.5, 1.3) << endl;       //调用 double add(double, double)return 0;
}

7、总结

以上就是C++的一些基础知识了,浏览过程中,如若发现错误,欢迎大家指正,有问题

的欢迎评论区留言或者私信。最后,如果大家觉得有所帮助,可以点一下赞,谢谢大

家!祝大家天天开心,顺遂无虞!
http://www.xdnf.cn/news/249013.html

相关文章:

  • 驱动读写实验
  • GRPO:利用组内平均奖励来计算优势
  • 蓝桥杯Python案例
  • 计算机组成原理实验(5) 堆栈寄存器实验
  • 2025五一杯数学建模ABC题赛题已出
  • ctfshow web入门 web44
  • Python学习笔记(第一部分)
  • 基于深度学习的人脸属性识别算法研究
  • 随机森林实战:从原理到垃圾邮件分类
  • 超稳定性理论
  • 第十四章:生产之路:LLM 应用部署、运维与优化
  • MOOS-ivp使用(一)——水下机器人系统的入门与使用
  • 【2025最新面经】暑期实习常问知识点
  • 前端面经 4
  • 【C++学习笔记】深入理解虚函数和多态
  • 简单句练习--语法基础
  • 50、【OS】【Nuttx】【OSTest】参数解析:函数定义
  • 当算力遇上堵车:AI如何让城市血管不再“血栓”?
  • OpenStack Yoga版安装笔记(25)Nova Cell理解
  • 黑马Java基础笔记-6
  • 伽利略如何测量光速?一场跨越山头的失败实验
  • VBA数据结构深度解析:基础类型、自定义类型与数组操作指南
  • Dagster资产工厂实战:从Python到YAML配置的高效ETL流程
  • 408真题笔记
  • 第十三章:LLM 应用质量保证:评估体系、工具与实战
  • 深入解析三大查找算法:线性查找、二分查找与哈希查找的原理与应用
  • 进程(Process)和操作系统(Operation System)
  • ctfshow web入门 web46
  • 用spring-boot-maven-plugin打包成单个jar有哪些缺点优化方案
  • pandas读取Excel数据(.xlsx和.xls)到treeview