C++:数据类型

news/2024/9/29 21:26:00

1 C++

  1.1 什么是C++语言呢?

    C++语言是面向过程编程的高级语言, 同时也可以向高级语言一样面向对象编程,泛型编程;

    C++语言派生自C语言,所以C++语言可以向下兼容C语言;C++相比C,扩展了面向对象编程,泛型编程;

    C++语言大小写敏感,支持ANSI标准;

    G++编译器是将 gcc 默认语言设为 C++ 的一个特殊的版本;如果命名遵循规范,那么通过gcc来编译c++也是可行的;

  1.2 C++面向对象的特性

    1.2.1 封装 Encapsulation:将程序打包封装成接口,隐藏实现细节,只对外提供调用接口;

    1.2.2 继承 Inheritance:  从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法;

    1.2.3 多态 Polymorphism:同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性;

    1.2.4 抽象 Abstraction:  从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展;

  1.3 C++语言分布

    1.3.1 基础数据结构:              变量,数据类型,常量等;    用于构造数据类;

    1.3.2 C++标准库:                 C++标准库函数;                 用于操作文件,字符串等;

    1.3.3 C++标准模板库(STL):  C++标准库方法函数;           用于操作数据结构等;

2 C++基本语法

  2.1 数据类型转换 cast

    2.1.1 静态转换 static_cast:         用于将一种数据类型的值 转换为 另一种相似的数据类型的值;

                       转换时不进行类型检查,因此可能会引发异常;

    2.1.2 动态转换 dynamic_cast:    用于将基类指针或引用 转换为 派生类指针或引用;

                       转换时会进行类型检查,如果不能进行转换则返回空指针或引发异常;

    2.1.3 常量转换 const_cast:         用于将const类型的对象属性 转换为 非const类型的对象属性;

    2.1.4 重新解释转换reinterpret_cast:用于将一种数据类型的值 转换为 另一种数据类型的值;

                     转换时不进行类型检查,因此可能会引发异常;

int i = 10;
float f = static_cast<float>(i); // 静态将int类型转换为float类型class Base {};
class Derived : public Base {};
Base* ptr_base = new Derived;
Derived* ptr_derived = dynamic_cast<Derived*>(ptr_base); // 将基类指针转换为派生类指针const int i = 10;
int& r = const_cast<int&>(i); // 常量转换,将const int转换为intint i = 10;
float f = reinterpret_cast<float&>(i); // 重新解释将int类型转换为float类型

  2.2 类作用域变量

    声明在类内部的变量,使用类名和作用域解析运算符“::”来访问;

#include <iostream>
class MyClass {
public:
    static int class_var;  // 类作用域变量
};
int MyClass::class_var = 30;
int main() {
    std::cout << "类变量: " << MyClass::class_var << std::endl;
    return 0;
}

  2.3 引用变量

    2.3.1 引用变量声明

      定义:引用其他变量的变量,作用类似指针但不是指针;

      属性:引用变量在创建时必须初始化其被引用对象,引用变量的被引用对象不能修改;不存在空引用;

int    i;
int&    r = i;    //声明引用变量r,i是被引用变量;这样可以通过r,i变量访问同一块内存;

    2.3.2 引用变量作用

      2.3.2.1 作为函数形参传递,传递之后对引用变量的修改就相当于对被引用变量的修改,作用等价于指针,但是更安全;

      2.3.2.2 作为函数返回值传递;注意这里有点反常识但是合理,此时函数可以被放在等式左边用来赋值;

double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues(int i) {  double& ref = vals[i];    // 这里引用声明,传递的是vals[i]的内存,那可不就是地址了嘛;return ref;               // 返回引用变量,这样函数就可以被放在等式左边用来赋值了;    
}setValues(1) = 20.23;        // 将20.23存储到 vals[1]了;

 3 类

  类是一种自定义数据类型,可以用来创建具有相同属性和行为的多个对象;是C++的核心特性;

#include<iostream>
using namespace std;
//记录一下我的第一个c++程序,虽然这是一个因为傻吊主管而半途而废的新起点;
class Box{                                      //声明一个类,名字为Box;public:                                     //声明类成员的访问属性public;double length;                          //声明类变量double height;void set(double length,double height);   //声明类方法函数double get_area(void){                   //函数定义在类内,则默认声明为内联inline函数;return length * height;}
};void Box::set(double len, double hei){length = len;height = hei;}int main(){cout<<"hello c++ \n"<<endl;Box box1;double area;box1.set(15,30);area = box1.get_area();cout<<"box1.get_area:"<< area <<endl;
}

  3.1 类成员 访问修饰符

    一个类内部可以有多种访问修饰符,不写访问修饰符默认为private属性;

    3.1.1 public 公有属性:     在当前类、类的外部也可以访问类内部的公有成员;

    3.1.2 protected 受保护属性: 在当前类、友元函数和派生类中可以访问受保护成员;

    3.1.3 private 私有属性:         在当前类、友元函数可以访问私有成员;派生类不可以访问;

  3.2 派生类 继承属性    

    派生类成员可以继承基类成员的访问属性;private继承,则派生类成员不能访问基类成员;

    3.2.1 public class_A 继承:  基类 public,protected,private成员的访问属性在派生类中分别变成:public, protected, private;

    3.2.2 protected class_A 继承: 基类 public,protected,private成员的访问属性在派生类中分别变成:protected, protected, private;

    3.2.3 private class_A 继承:   基类 public,protected,private成员的访问属性在派生类中分别变成:private, private, private;

  3.3 构造函数

    类的构造函数 会在每次创建新的类对象时执行;

    名称与类完全相同,没有返回类型,可以带参数类型;作用主要是用于为成员变量设置初值;

  3.4 析构函数

    类的析构函数 会在每次删除已创建的类对象时执行;

    名称与类完全相同但是加了一个~,没有返回类型,没有参数类型;作用主要是用来释放资源;

  3.5 拷贝构造函数

  3.6 友元函数

  3.7 内联函数

  3.8 this指针

  3.9 指向类的指针

  3.10 静态成员

 

4 纯虚函数

  声明在基类中的函数;它在基类中没有定义不能实例化,由派生类重新声明后才能实例化;看来主要作用是占位,先放着;

模板

//比如定义的时候是template<class V, class M=void>;
//那等会代码中的类名V就替换掉;代码中的M就替换成void;//比如在在View类中写了 template<class P>
//引用的时候代码为:View<WatchDrainagePresenter>
//表示等下View类中的V都用WatchDrainagePresenter替代了;

  

 

 

上面这几个类型转换里,const_cast<>,reinterpret_cast<>里为什么有& ??先放着;

引用变量的&号靠近变量放着可以么?先放着;

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

“你好BOE”重磅亮相首届上海国际光影节 打造“艺术x科技”顶级影像盛宴

黄浦江畔,北外滩胜地。作为首届上海国际光影节虹口区分会场的重点项目之一,9月29日-10月5日,BOE(京东方)年度标杆性品牌巡展IP“你好BOE”Super O SPACE影像科技展在上海北外滩滨江5米平台盛大启幕,BOE(京东方)携手上海电影、上影元、OUTPUT、新浪微博、海信、OPPO、京…

2024 最新 Navicat Premium 17.0.13 简体中文版(亲测可用)

步骤如下: 一、官网下载安装包:https://www.navicat.com.cn/download/navicat-premium二、安装Navicat Premium 17注意:安装完后不要打开已打开自行退出 三、补丁下载关注后发送“navicat17”即可获取补丁下载地址,无套路。 四、安装补丁 先将下载下来的压缩包里面的winmm…

第二十七讲: 读写分离有哪些坑?

今年秋招,面试官隔着电脑屏幕看着简历上“熟悉搭建过mysql集群,能排错” 对你说:在mysql集群中,一般是一主多从的方式,即一台mysql机器做公司业务的读,其他机器留给客户查询做负载均衡。 hr问你:“老板开了一家金融公司,他要求客户在频繁资金流动下,时刻要保证拿到最新…

【牛客训练记录】牛客周赛 Round 62

https://ac.nowcoder.com/acm/contest/91177#question赛后反思 一直都不会做期望,对于概率论相关的需要加强 A题 直接模拟字符串字符交换即可 #include <bits/stdc++.h> #define int long longusing namespace std;void solve(){string s; cin>>s;cout<<s[1…

Large_bins_attack

导言 在libc版本越来越高的情况下,许多旧的攻击方式已然失效,而large_bin_attack始终屹立不倒,是许多攻击方式的先决条件,这也是我们要学习它的原因 large_bin 概念 large_bin是一种堆分配的管理方式,是双向链表,用于管理大于某个特定大小阈值的内存块。一般而言,进入la…

直播的剪辑工作流/工具分享

基本流程获取素材 粗剪 导出音频识别成字幕文件 应用字幕并校准字幕 配bgm并进行精剪工具分享 一 获取直播素材高时效性-即录即拿:VLC media player、录屏软件(如Screen Record Pro等) 中时效性但解放双手-需要等待其录制/编码完成:biliup:如果想保持想保存为mp4,需要安装f…

AT_arc184_d [ARC184D] Erase Balls 2D

AT_arc184_d [ARC184D] Erase Balls 2D 首先,假定我们选定的行为 \(i_1,i_2,\cdots,i_k\),并有 \(i_1<i_2<\cdots<i_k\),则 \(p_{i_1}>p_{i_2}>\cdots>p_{i_k}\)。其中 \(p_x\) 表示 \((x,p_x)\) 的位置上有点。 最终状态形如下图。显然,这种状态与操作顺…

「Wdoi-(-1)」恋弹者们的黑集市

「Wdoi-(-1)」恋弹者们的黑集市 魔理沙有两种方法移动这个骰子:将骰子向下一列翻转,或者向下一行翻转。值得注意的是,翻转骰子后,骰子每面上的数字就会随着翻滚而改变。现在魔理沙需要将骰子滚动至第 \(n\) 行第 \(m\) 列。 魔理沙的分数被定义为,所有时刻,骰子与棋盘上的…