C++
文章平均质量分 56
infinite66
这个作者很懒,什么都没留下…
展开
-
C++学习——输入输出
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是将数据传送给输出文件C++编译系统提供的输入输出标准I/O:键盘输入,输出到显示器屏幕 文件I/O:磁盘文件输入,输出到磁盘文件 串I/O:字符数组作为存储空间(实际上可以利用该控件存储任何信息)标准输出流cout << a;标准输入流char c = cin.get(); //一次只能输入一个字符cout << "c = " << c << endl;char原创 2021-03-10 17:43:43 · 160 阅读 · 0 评论 -
C++学习——C++异常
异常处理异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等)try 试图执行{}中的内容,在可能出现异常的地方,抛出异常throw,try下面catch捕获异常。如果不想处理异常,继续向上抛出 throw,如果没有任何处理异常的地方,那么成员调用terminate函数,繁盛中断int myDevice(int a, int b){ if (b == 0) { //如果b异常 抛出异常原创 2021-03-10 16:59:09 · 148 阅读 · 0 评论 -
C++学习——类型转换
不是必要操作,就不要经常使用类型转换静态转换(static_cast)用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换进行上行转换(把派生类的指针或引用转换成基类表示)是安全 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的//父子之间的转换class Base{};class Child : public Base {};class Other {};void test02(){ Base *base = NULL;原创 2021-03-08 22:32:11 · 154 阅读 · 0 评论 -
C++学习——函数模板、类模板
C++泛型编程:用模板技术实现【参数类型化】函数模板的基本使用方法template<class T> 或 template<typename T>告诉编译器紧跟的代码里出现T不要报错例子:交换两个数字【如果按照常规的写法,那一种数据类型就要写一个函数,太麻烦】void mySwapInt(int &a, int &b){ int tmp = a; a = b; b = tmp;}void mySwapDouble(double &...原创 2021-03-03 17:53:29 · 162 阅读 · 1 评论 -
C++学习——多态
多态多态性提供接口与具体实现之间的另一层隔离。多态性改善了代码的可读性和组织性,同时也使创建的程序具有可扩展性,项目不仅在最初创建时期可以扩展,而且当项目在需要有新的功能时也能扩展静态多态和动态多态的区别就是函数地址是早绑定(静态联编)还是晚绑定(动态联编)。静态多态:函数重载、运算符重载;函数的调用地址在编译阶段就可以确定,并产生代码; 动态多态:派生类、虚函数实现;函数的调用地址不能在编译期间确定,需要在运行时才能决定。//多态[静态联编和动态联编]class Animal{pu原创 2021-03-01 17:53:11 · 75 阅读 · 0 评论 -
C++学习——继承
原始类的写法class News{public: void header() { cout << "公共首部栏" << endl; } void footer() { cout << "公共底部栏" << endl; } void left() { cout << "左侧列表" << endl; } void content() { cout << "新闻播放" <&l原创 2021-03-01 15:58:18 · 82 阅读 · 0 评论 -
C++学习——运算符重载operator
加号运算符重载自定义数据类型实现运算在成员函数 或者 全局函数 中重写一个+运算符的函数函数名 operator+()运算符重载也可以提供多个版本:Person p4 = p3+10;//加号运算符重载//自定义数据类型也可以实现一个加号运算class Person{public: Person() { } Person(int a, int b) :m_A(a), m_B(b) {} //+运算符重载,成员函数 Person operator+(Perso原创 2021-02-25 18:05:26 · 662 阅读 · 0 评论 -
C++学习——C++面向对象模型初探、成员变量和函数的存储、this指针、友元
成员变量和函数的存储C++中用封装那数据(成员属性)和操作(成员函数)放在一起,但是“数据”和“处理数据的操作”仍然是分开存储的。C++中的非静态数据成员直接内含在类对象中,就像C中的struct一样 成员函数虽然内含在class声明之内,却不出现在对象中 每一个非内联成员函数只会诞生一份函数实例一个对象的大小只包含非静态成员变量,其中空类的大小为1#include <iostream>using namespace std;//#pragma pack(1)clas原创 2021-02-24 22:28:08 · 115 阅读 · 0 评论 -
C++学习——静态成员和单例模式
静态成员变量在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只有一个静态数据的拷贝。静态成员变量属于某个类,所以对象共享。静态变量,是在编译阶段就分配空间,对象还没有创建时,就已经分配空间了。 静态成员变量必须在类中声明,在类外定义 静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间 静态数据成员可以通过类名或者对象名来引用 静态成员变量static int m_Id; //静态成原创 2021-02-24 17:51:23 · 522 阅读 · 0 评论 -
C++学习——类对象作为类成员的案例、new运算符动态分配内存
类对象作为类成员类对象作为类成员的时候 构造顺序是先将类对象一一构造,然后构造自己,析构的顺序是相反//类对象作为类成员的案例//类对象作为类成员的时候 构造顺序是先将类对象一一构造,然后构造自己,析构的顺序是相反class Phone{public: Phone() { cout << "手机的默认构造函数调用" << endl; } Phone(string name) { mPhoneName = name; cout <<原创 2021-02-24 15:21:01 · 352 阅读 · 0 评论 -
C++学习——构造函数和析构函数
对象的初始化和清理当创建对象的时候,这个对象应该有一个初始状态;当对象销毁之前应该销毁自己创建的一些数据。C++中的解决方案,构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和对象清理工作不管有没有我们有没有提供初始化操作和清理操作,编译器也会增加默认的操作,只是这个默认初始化操作不会做任何事,所以编写类就应该顺便提供初始化函数。构造函数和析构函数构造函数:与类名相同,没有返回值,不写void,可以发生重载(可以没有参数,也可以有参数)析构函数:与类名相同,类名原创 2021-02-23 15:44:47 · 124 阅读 · 0 评论 -
C++学习——C语言下的封装和C++语言下的封装
C语言中的封装struct Person{ char mName[64]; int mAge;};// 因为在C中不能在结构体中声明函数,就只能在外部实现,然后用test01函数中的方法进行封装void PersonEat(struct Person *p){ printf("%s 在吃饭\n",p->mName);}void test01(){ struct Person p1; strcpy(p1.mName, "德玛西亚"); PersonEat(&原创 2021-02-23 11:19:38 · 375 阅读 · 0 评论 -
C++学习——extern C浅析
extern C 主要解决的问题就是 在C++中调用C中的函数C++中如何调用C中的函数如果C++中直接调用C中的函数的话,会造成“无法解析外部命令”的错误;这是因为在C++中函数是可以发生重载的,编译器会把函数名偷偷地换掉解决方法就是使用关键字extern实现。//C++中想调用C语言方法怎么办呢??? extern "C" void show(); // show方式就按照C语言方式做链接那如果需要调用很多个函数该怎么办呢?为了防止重复在C++中写extern "C" 的语原创 2021-02-23 10:31:36 · 98 阅读 · 0 评论