美文网首页
C++语言学习之面向对象

C++语言学习之面向对象

作者: Dalvik_ | 来源:发表于2021-03-14 20:04 被阅读0次

    1.C语言与C++语言的区别

    • C++面向对象
    • C 面向过程 函数+结构体
    • C++可以运行调用C语言 反之 C语言无法运行C++

    2.常量之C的常量与C++的常量

    • C语言 const 常量是可以通过指针修改值
    int main() {
        const int num = 9;
        int *p = #
        *p = 100;
        printf("num=%d\n", num);
        return 0;
    }
    
    • C++ const 不能通过指针修改值
    #include <iostream>
    int main() {
        const int num = 9;
        int *p = &num; //这里直接报错 编译报错
        *p = 100;
        std::cout << "num=" << num << std::endl;
        return 0;
    }
    

    3.引用的原理与常量的引用

    • 引用的定义 int & num
    int main() {
        int num1 = 90;
        int &num2 = num1;
        cout << "num1的地址:" << &num1 << "  num1的值:" << num1 << endl;
        cout << "num2的地址:" << &num2 << "  num1的值:" << num2 << endl;
        return 0;
    }
    输出:
    num1的地址:0x61fe44  num1的值:90
    num2的地址:0x61fe44  num1的值:90
    
    • 行参如果不使用引用,会生成新的内存地址
    • 引用类型 不会开辟新的内存地址 只是取一个别名
    //形参不是引用类型是 值复制  值传递  
    void function1(int num) {
        cout << "num的地址:" << &num << endl;
    }
    //形参是引用类型   内存地址是一样的
    void function2(int &num) {
        cout << "num的地址:" << &num << endl;
    }
    
    int main() {
        int num1 = 90;
        int &num2 = num1;
        cout << "num1的地址:" << &num1 << "  num1的值:" << num1 << endl;
        cout << "num2的地址:" << &num2 << "  num1的值:" << num2 << endl;
    
        function1(num1);
        function2(num1);
        return 0;
    }
    
    输出:
    num1的地址:0x61fe44  num1的值:90
    num2的地址:0x61fe44  num1的值:90
    num的地址:0x61fe20
    num的地址:0x61fe44
    
    • 常量的引用
    int main() {
        int num1 = 90;
        int &num2 = num1;
        const int &num3 = num1; //常量的引用类型
        num2 = 100;
        // num3 = 99;//这里直接报错  常量引用类型不能修改值
        cout << "num1的地址:" << &num1 << "  num1的值:" << num1 << endl;
        cout << "num2的地址:" << &num2 << "  num1的值:" << num2 << endl;
        return 0;
    }
    

    4.函数重载与默认行参,无行参名的特殊用法

    • C语言不支持函数重载
    • C++ 语言支持函数重载 支持默认行参
    // 函数重载 
    void func(int num1) {
        cout << "num1的值:" << num1 << endl;
    }
    
    void func(int num1, int num2) {
        cout << "num1+num2的值:" << num1 + num2 << endl;
    }
    int main() {
        func(20);
        func(100, 200);
        return 0;
    }
    输出:
    num1的值:20
    num1+num2的值:300
    
    // 默认形参
    void func(int num1, int num2 = 66) {
        cout << "num1+num2的值:" << num1 + num2 << endl;
    }
    
    int main() {
        func(20);
        func(100, 200);
        return 0;
    }
    输出:
    num1+num2的值:86
    num1+num2的值:300
    
    • 无行参名的函数 只定义参数类型 为了后期好扩展 可以添加参数名,然后再处理逻辑
    void change(int num1, int) {
    }
    int main() {
        change(100, 200);
        return 0;
    }
    

    5.C++面向对象

    • 规范写法:头文件+ 实现文件
    //Student.h 头文件 只写声明 不写实现
    class Student {
    private:
        char *name;
        int age;
    public:
        void setName(char *name);
    
        void setAge(int age);
    
        char *getName();
    
        int getAge();
    };
    
    
    // Student.cpp  实现文件 根据声明 来写实现
    #include "Student.h"
    void Student::setName(char *name) {
        this->name = name;
    }
    
    char *Student::getName() {
        return this->name;
    }
    
    void Student::setAge(int age) {
        this->age = age;
    }
    
    int Student::getAge() {
        return this->age;
    }
    
    • 对象的编写 赋值 调用 C++的对象指向的是一个指针
    int main() {
        Student student; //栈区开辟
        student.setName((char *) "老六");
        student.setAge(20);
        cout << "student的name:" << student.getName() << "  age:" << student.getAge() << endl;
    
    
        Student *stu = new Student; //堆区开辟开辟内存
        stu->setName((char *) "老王");
        stu->setAge(36);
        cout << "stu的name:" << stu->getName() << "  age:" << stu->getAge() << endl;
    
        delete stu; //需要手动释放
        stu = NULL; //指向空指针
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:C++语言学习之面向对象

          本文链接:https://www.haomeiwen.com/subject/dybbqltx.html