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

C++的基础知识

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

1、前言

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

2、引用

2.1 引用的概念

|------------------------|
| 引用就是给变量起别名,引用必须在声明时初始化 |

cpp 复制代码
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)内部实现细节,重新提供外部访问接口进行访问。 |

cpp 复制代码
#include <iostream>

using namespace std;

//定义一个银行类
class BankAccount{

//封装封装敏感数据
private:
    string owner;       //账户
    double balance = 0.0;     //余额

// 暴露安全操作接口
public:
    // 添加构造函数,初始化 balance 为 0.0
    BankAccount() : 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 什么是类和对象

|---------------------------------------------------------------------------------------|
| 类是创造对象的模板,对象是类的定义出来的变量; 类的成员不但可以是变量,还可以是函数; 一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程叫类的实例化。 |

cpp 复制代码
//定义一个狗类
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 成员只能在类内部访问
cpp 复制代码
//定义一个狗类
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继承

cpp 复制代码
//创建一个动物基类
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继承

cpp 复制代码
//protected继承
class Cat : protected Animal{
public:
    void setPropetry(){
        age = 2;                 //基类 public 成员变为 protected
        weight = 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 方法在派生类中变为 protected
    return 0;
}

4.3.3 private继承

cpp 复制代码
//private继承
class Duck : private Animal{
public:
    void setPropetry(){
        age = 3;                // 基类 public 成员变为 private
        weight = 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 方法在派生类中变为 protected
    return 0;
    
    //private继承
    Duck duck;
    //duck.age;             // 错误:基类 public 成员在派生类中变为 private
    //duck.setAge();        // 错误:基类 public 方法在派生类中变为 private
}

5、多态

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

5.1 多态的实现

|----------------------------------------------------------------------------|
| 1. 基类定义虚函数(virtual 关键字) 2. 派生类重写虚函数(override 关键字) 3. 通过基类指针或引用调用虚函数,触发动态绑定 |

cpp 复制代码
#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();       //调用wang
    animal2->speek();       //调用mi

    delete  animal1;
    delete  animal2;
    return 0;
}

6、函数重载

|---------------------------------------------|
| 函数重载就是函数名称相同,但这些函数的参数列表不同(参数类型、参数个数或参数顺序不同) |

cpp 复制代码
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++的一些基础知识了,浏览过程中,如若发现错误,欢迎大家指正,有问题 的欢迎评论区留言或者私信。最后,如果大家觉得有所帮助,可以点一下赞,谢谢大 家!祝大家天天开心,顺遂无虞! |

相关推荐
吴声子夜歌2 小时前
ApacheCommons——commons-pool2(高性能通用对象池框架)
java·开发语言·apache
kruptos7 小时前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法
吴声子夜歌7 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
benchmark_cc8 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库8 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H9 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒9 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP9 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN9 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
江畔柳前堤10 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native