首页 > 编程语言 >C++:类与面向对象&static和this关键字&其他关键字

C++:类与面向对象&static和this关键字&其他关键字

时间:2024-07-02 12:56:24浏览次数:19  
标签:面向对象 person C++ 关键字 static class struct

类与面向对象

  • struct和class
    (1)struct是C中用户自定义类型,主要功能是对功能相关数据的封装
    (2)struct不能直接封装函数,但可以通过封装函数指针来间接封装函数
    (3)struct就是class的初级阶段,class在struct基础上做了很多扩展,便有了面向对象

  • 访问权限
    (1)类是对数据(成员变量)和方法(成员函数)的封装
    (2)封装的一个重要特征就是访问权限管控,本质是为了隐藏实现细节,避免意外篡改
    (3)C++支持三个访问管控级别:private、protected、public

  • C++的对象创建和销毁
    (1)对象的本质等同于C中的变量,对象的创建和销毁也就是变量的产生和销毁,本质上是变量对应的内存地址的分配和释放归还
    (2)C中全局变量和局部变量都是自动分配和回收内存的,堆内存需要用户手工申请和释放(malloc和free调用)
    (3)C++中因为变量升级成了对象,设计到构造函数和析构函数,因此malloc和free升级为了new和delete
    (4)C++中仍然大量使用全局变量和局部变量,但是动态分配占比例越来越多。这是业务特点决定的,不是C++语言决定的。语言只是提供机制,业务才决定策略。

#include <iostream>

// 定义一个 struct
struct Person {
    // 默认是 public 的
    std::string name;
    int age;

    void introduce() {
        std::cout << "Hi, I'm " << name << " and I'm " << age << " years old." << std::endl;
    }
};

int main() {
    // 创建一个 Person 对象
    Person person;
    person.name = "Alice";
    person.age = 30;
    person.introduce();

    return 0;
}

#include <iostream>

// 定义一个 class
class Person {
    // 默认是 private 的
    std::string name;
    int age;

public:
    // 构造函数
    Person(std::string n, int a) : name(n), age(a) {}

    void introduce() {
        std::cout << "Hi, I'm " << name << " and I'm " << age << " years old." << std::endl;
    }

    // 设置和获取名称的方法
    void setName(std::string n) {
        name = n;
    }

    std::string getName() const {
        return name;
    }

    // 设置和获取年龄的方法
    void setAge(int a) {
        age = a;
    }

    int getAge() const {
        return age;
    }
};

int main() {
    // 创建一个 Person 对象
    Person person("Bob", 25);
    person.introduce();

    // 修改名称和年龄
    person.setName("Charlie");
    person.setAge(28);
    person.introduce();

    return 0;
}

static和this关键字

  • static在C中的用法
    (1)静态全局变量和函数,限制链接属性。C++中建议优先使用命名空间机制替代
    (2)静态局部变量,更改地址域和生命周期。C++中继续沿用。
  • static在C++中新增用法
    (1)用在class中,有静态数据成员和静态成员函数
    (2)简单理解:静态成员和方法是属于class的,而非静态是属于对象的
    (3)静态类往往用在单例模式中,实际上和面向对象的思想有所差异
    (4)要真正理解静态类,得先学习面向对象和普通非静态类后才可以
  • this关键字
    (1)本质是个指针,指向当前对象
    (2)this的主要作用是让我们在未定义对象前可以在方法中调用对象里的成员
    (3)this的深度讲解在第2部分,包括具体使用和实现原理

面向对象的其他关键字

  • 面向对象允许类的继承机制
    (1)C++中用:来表示继承关系,有些编程语言有extends关键字表示继承关系
    (2)virtual修饰class的成员函数为虚函数,一般在基类中,只有接口声明没有实体定义
    (3)基类的virtual成员可以在派生类中override重写,以实现面向对象的多态特性
    (4)注意区分重写override与重载overload
    (5)override关键字是C++11引入,用来在派生类中成员函数声明时明确表明需要派生类去重写的那些成员方法,这样如果程序员在成员方法实体定义中做的不对编译器可以报错提醒

  • 继承的终止final
    (1)一个class不希望被继承(不想做父类),可以定义时用final修饰
    (2)一个成员方法不希望被子类override,可以声明时用final修饰
    (3)final是C++11引入的
    (4)很多其他面向对象语言如java中也有final关键字,也是这个作用

  • using关键字
    (1)用法1就是using namespace std;这种
    (2)用法2与class的继承和访问权限限制有关,属于一个声明,能够让private继承的子类去声明并访问父类中本来无权限访问的成员

  • operator
    (1)用于运算符重载,也就是为一个class重定义某种运算符

  • friend
    (1)让不属于一个class的外部函数也能访问class内受保护的成员变量
    (2)实际上是对面向对象的一种扩展或者说破坏,在面向对象深入理解之后再来学习更好

  • explicit
    (1)本意为显式的,对应implicit隐式的
    (2)用来修饰只有一个参数的构造函数,以阻值构造函数不合时宜的类型转换
    (3)很简单一个特性,第2部分再详解

总结

理解struct和class的使用
理解什么是面向对象
理解static在C中的用法和C++中新增用法
理解关键字virtual、重写override与重载overload、final、using、operator、friend、explicit

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

标签:面向对象,person,C++,关键字,static,class,struct
From: https://blog.csdn.net/qq_43441284/article/details/139860429

相关文章

  • 深入理解 C++11 多线程编程:从入门到实践
    C++多线程编程是指使用C++提供的多线程库来并行执行代码块,从而提高程序的性能和响应能力。C++11标准引入了多线程支持,使得在C++中进行多线程编程变得更加容易和直观。以下是C++多线程编程的基本知识,并附有例子代码。多线程的基本概念线程(Thread):线程是进程中的一个执......
  • C/C++ 赋值表达式注意事项
    在C/C++中,赋值表达式是基础且关键的一部分,它用于给变量赋值。理解和正确使用赋值表达式对于编写有效、可维护的代码至关重要。以下是一些关于C/C++赋值表达式的注意事项:赋值操作符:在C/C++中,赋值是通过赋值操作符=完成的。这意味着将右侧的值或表达式的结果赋给左侧的变......
  • C#、C++和C的不同之处
    目录什么是C语言?什么是C++?什么是C#?主要不同C与C++C++与C#C与C#什么是C语言?我们先从C语言(Cprogramminglanguage)开始,因为它是三种语言中资格最老、使用最广的一种。丹尼斯·里奇(DennisRitchie)于1972年发明了它,然后于1978年出版。里奇最开始的设计初衷是想要开发新版本的Unix......
  • C++中的cerr和clog
    标准错误流(cerr)预定义的对象cerr是iostream类的一个实例。cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是非缓冲的,且每个流插入到cerr都会立即输出。cerr也是与流插入运算符<<结合使用的,如下所示:和cout用法一样不过区别就在是否缓冲的问题。cerr是不缓冲的有什么......
  • C++文件输入输出
    参考博文:https://blog.csdn.net/houbincarson/article/details/136327765/*文件输入输出fstream有三个文件流类:std::ifstream:用于从文件中读取数据的输入流对象。std::ofstream:用于向文件中写入数据的输出流对象。std::fstream:用于读写文件的输入输出流对象。*/#include<f......
  • 2024华为OD机试真题- 电脑病毒感染-(C++/Python)-C卷D卷-200分
     2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)      题目描述一个局域网内有很多台电脑,分别标注为0~N-1的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。......
  • C++(函数指针)
    目录基本语法示例常见用途注意事项函数指针是指向函数的指针,它保存了函数的地址,可以通过它调用指向的函数。函数指针在C++中具有多种用途,例如回调函数、动态函数调用以及实现多态等。基本语法函数指针的声明语法如下:返回类型(*指针名)(参数列表);示例声明和定义一个函数......
  • C++中的引用(Reference)
    1.引用(Reference)在C++中,引用(Reference)是一个变量的别名.它允许你通过不同的名字访问同一个变量.与指针不同,引用在定义时必须被初始化,并且一旦绑定到某个变量,之后不能更改引用的绑定对象.引用的语法引用(Reference)是C++中的一种重要特性,提供了对现有变量的另一种名称或别......
  • 0基础学C++ | 第11天 | 基础知识 | 引用
    目录引用的基本使用 引用的注意事项 引用做函数参数 引用做函数的返回值引用的本质引用的基本使用作用:引用就是给变量起别名,它不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。我的理解就是......
  • 如何使用C++进行文件读写操作
    在C++中,我们可以使用标准库中的 <fstream>(文件流)来进行文件的读写操作。以下是一些基本的文件读写操作的示例。读取文件cpp复制代码#include<fstream>#include<iostream>#include<string>intmain(){std::ifstreamfile("example.txt");//打开文件以进行读取操......