C++入门到入土
C++学习的东西吧,差不多这些啦,也有些自己学习的理解
花落的那一天
这个作者很懒,什么都没留下…
展开
-
5.2_多态的作用
C语言中文网这里讲的非常清楚,就直接引用了在面向对象的程序设计中,使用多态能够增强程序的可扩充性,即程序需要修改或增加功能时,只需改动或增加较少的代码。此外,使用多态也能起到精简代码的作用。本节通过两个实例来说明多态的作用。游戏程序实例游戏软件的开发最能体现面向对象设计方法的优势。游戏中的人物、道具、建筑物、场景等都是很直观的对象,游戏运行的过程就是这些对象相互作用的过程。每个对象都有自己的属性和方法,不同对象也可能有共同的属性和方法,特别适合使用继承、多态等面向对象的机制。下面就以“魔法门...转载 2022-05-26 22:46:28 · 1505 阅读 · 0 评论 -
5.1_多态的基本概念
多态可以分为编译时的多态和运行时的多态。编译时的多态主要指的是函数的重载(包括运算符的重载)、对重载函数的调用,在编译时就能根据实参确定调用哪个函数,所以叫做编译时的多态。而运行时的多态和继承、虚函数等概念有关。通过基类指针实现多态派生类对象的地址可以赋值给基类指针。(把派生类当成基类来用也不是不行,因为不会缺少东西)对于通过基类指针调用基类和派生类中都有的同名,同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数。而当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基原创 2022-05-26 22:46:02 · 139 阅读 · 0 评论 -
4.5_私有派生和保护派生
除了公有派生,C++也支持私有派生和保护派生。class B: private A {};class C: protected A {}; 基类成员 派生方式 公有派生 私有派生 保护派生 私有成员 不可访问 不可访问原创 2022-05-26 22:34:18 · 452 阅读 · 0 评论 -
4.4_其他派生和公有派生的赋值兼容规则
多层次的派生C++中派生是可以多层次的。例如学生类派生出中学生类,中学生类派生出初中类和高中类。在定义派生类时,只写直接基类,不写间接基类。派生类的成员包括派生类自己定义的成员、直接基类中定义的成员,以及所有间接基类的全部成员派生类的对象生成时,会先执行最基层的基类,然后逐层往下。消亡时先执行自身的析构函数,然后逐层执行各个基类的析构函数。包含成员对象的派生类在派生类也是封闭类的情况下,构造函数的初始化列表不仅要指明积累对象的初始化方式,还要指明成员对象的初始化方式。派生类对象生成时:先从上至原创 2022-05-26 22:31:41 · 450 阅读 · 0 评论 -
4.2_protected访问范围说明符 4.3_派生类的构造函数和析构函数
protected访问范围说明符类的成员可以是私有成员,公有成员,保护成员。私有成员只能类中的成员函数可以访问,公有成员就跟全局变量一样,什么地方都可以访问到。那么保护成员呢?保护成员和私有成员的区别就在于继承的类的访问问题上。一个派生类中父类继承过来的私有成员是不能访问到的,因为私有成员只有定义它的类可以用,继承过来的不能用,放在派生类里面,但是只有基类的成员函数能访问到,,如果想要继承下去的能用上,又不想让其他类访问,就可以定义成保护成员。基类的保护成员可以在派生类的成员函数中被访问派生类原创 2022-05-26 22:31:07 · 132 阅读 · 0 评论 -
4.1_继承和派生的概念
继承和派生当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。派生类的成员函数不能访问基类的成员函数。C++中从一个类派生出另一个类的写法如下class 派生类名:继承方式说明符 基类名{ ...};继承方式说明符可以是public(公有继承)、private(私有继承)或protected(保护继承)。一般都使用public。protected或private方式很少用到。对齐由于计算机内原创 2022-05-19 09:58:30 · 191 阅读 · 0 评论 -
3.6_重载类型强制转换运算符 3.7_运算符重载的注意事项
重载类型强制转换运算符C++中类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。类型强制转换运算符是单目运算符,只能重载为成员函数。经过重载后,(类型名)对象这个表达式等价于对象。operator类型名()。class Complex{ double real, imag;public: Complex (double r = 0, double i = 0): real(r), imag(i){}; operator double() {return r原创 2022-05-19 09:58:12 · 244 阅读 · 0 评论 -
3.5_重载流插入运算符和流提取运算符
重载后面的内容应该不常用了吧,应该前面的也不常用(重载流插入运算符和流提取运算符差不多就了解下他的本质就是位运算运算符就行,输出数据的时候注意优先级就行。如果自己定义了一个类,想要直接输入输出的话,就要重载下>>和<<。下面我们以全局函数的形式重载>>,使它能够读入两个 double 类型的数据,并分别赋值给复数的实部和虚部:istream & operator>>(istream &in, complex &A){ i原创 2022-05-19 09:56:55 · 241 阅读 · 0 评论 -
3.4_运算符重载为友元函数
运算符重载为友元主要内容其实还是友元,友元理解了其实是一样的。如果需要同时对一个变量和私有变量操作时,想让他们互换顺序仍能达到同样效果的话,需要重载运算符使其能访问私有成员。看例子吧,单讲讲不清楚class Complex{ double real, imag;public: Complex(double r, double i) : real(r), imag(i){}; Complex operator+(double r); friend Complex operator+(doub原创 2022-05-18 23:24:35 · 145 阅读 · 0 评论 -
3.3_浅拷贝和深拷贝
浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”如果没有进行重载,那么"="的作用就是把左边对象的每个成员变量都和右边相等,这时执行的是浅拷贝。#include <iostream>using namespace std;class copys{public: char *s; copys() { s = new ch原创 2022-05-18 23:24:02 · 72 阅读 · 0 评论 -
3.2_重载运算符‘‘=‘‘
C++规定,"="只能重载为成员函数。赋值运算符"=“要求左右两个操作数的类型是匹配的,或者至少是兼容的,如果希望”=“两边的操作数的类型即使不兼容也能够成立,就需要对”="进行重载。#include <iostream>#include <string>#include <cstring>using namespace std;class String{private: char *str;public: String() : str(NULL)原创 2022-05-18 23:23:28 · 137 阅读 · 0 评论 -
3.1_运算符重载
运算符重载的实质是编写以运算符作为名称的函数。运算符函数的格式如下:返回值类型 operator 运算符(形参表){ ...}包含被重载的运算符的表达式会被编译成对运算符函数的调用,运算符的操作数成为函数调用时的实参,运算符的结果就是函数的返回值。#include <iostream>using namespace std;class Complex{public: double real, imag; Complex(double r = 0.0, doubl原创 2022-05-18 23:22:52 · 60 阅读 · 0 评论 -
2.5_友元
友元分为两种:友元函数和友元类在理解友元的时候可以不认为是朋友,而是理解为“上级,主人”,因为friend后面跟的函数或者类都是可以访问自己这个类的私有成员的。友元函数在定义一个类的时候,可以把一些函数(包括全局函数和其他类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就能访问该类的私有成员了。将全局函数声明为友元函数的写法如下:friend 返回值类型 函数名(参数表);将其他类的成员函数声明为友元的写法如下:friend 返回值类型 其他类的类名::成员函数名原创 2022-05-18 20:55:10 · 136 阅读 · 0 评论 -
2.4_成员对象和封闭类
一个类的成员变量如果是另一个类的对象,就被称之为"成员对象"。包含成员对象的类叫封闭类(enclosed class)。一个类成员变量封闭类成员对象汽车轮胎为了使封闭类对象生成并初始化的时候让编译器知道成员对象时用哪个构造函数初始化的,可以通过在定义封闭类的构造函数时,添加初始化列表的方式解决。构造函数中添加初始化列表写法类名::构造函数名(参数表):成员变量1(参数表), 成员变量2(参数表),...{ ...}#include <iostream原创 2022-05-18 20:54:36 · 169 阅读 · 0 评论 -
2.3_常量对象和常量成员函数
如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加上const关键字,使之成为常量对象。class CDemo{public: void setValue() {}};const CDemo Obj; // Obj是常量对象在Obj被定义为常量对象的情况下,下面这条语句是错误的。Obj.SetValue();错误的原因是常量对象一旦初始化后,其值就再也不能改变。因此,不能通过常量对象调用普通成员函数,因为普通成员函数在执行过程中有可能修改对象的值。但可以通过原创 2022-05-18 20:54:16 · 224 阅读 · 0 评论 -
2.2_静态变量和静态成员函数
静态成员变量本质上是全局变量。一个类,哪怕一个对象都不存在,其静态成员变量也存在。设置静态成员变量的目的,是为了将和某些类紧密相关的全局变量和全局函数写到类里面,形式上成为一个整体。static 成员变量的内存既不是在声明类时分配,也不是在创建对象时分配,而是在(类外)初始化时分配。反过来说,没有在类外初始化的 static 成员变量不能使用。//通过类类访问 static 成员变量Student::m_total = 10;//通过对象来访问 static 成员变量Student stu("小原创 2022-05-18 20:53:08 · 64 阅读 · 0 评论 -
2.1_构造函数与析构函数
构造函数构造函数就是对象生成的时候调用的用来初始化的函数。复制构造函数复制构造函数是构造函数的一种,它只有一个参数,参数类型是本类的引用。复制构造函数被调用的三种情况用一个对象去初始化同类的另一个对象Complex c2(c1);Complex c2 = c1;这两条语句是等价的,第二条语句是初始化语句,不是赋值语句。作为形参的对象,是用复制构造函数初始化的,而且调用复制构造函数时的参数,就是调用函数时所给的实参。#include <iostream>using原创 2022-05-18 20:52:33 · 125 阅读 · 0 评论 -
1.1_内联函数
C++定义函数时,可以加上inline关键字inline int Max(int a, int b){ if (a > b) { return a; } return b;}增加了inline关键字的函数成为“内联函数”。与普通函数的区别是编译器处理调用内联函数的语句时会将内联函数代码体插入到调用的地方。调用内联函数可以省去因为调用函数时产生的时间消耗。加快程序运行速度。但是编译过后会使代码体积变大。当函数内有循环时,调用函数产生的时间消耗原创 2022-05-18 20:52:09 · 84 阅读 · 0 评论 -
C++基础—命令行手动编译
C++基础—命令行手动编译gcc/g++安装检查电脑是否安装gcc/g++1.打开Windows命令提示符(cmd.exe)打开方式"win+R"打开运行框、输入“cmd”2.在命令提示符中输入gcc -v安装gcc/g++找个链接下载mingw64找到mingw64中的bin文件夹地址在系统环境变量的path下添加手动进行编译dos进入源文件所在目录输入g++ main.cpp 即可编译编译单个文件g++ main.cpp编译多个文件g++ main.cpp me原创 2021-11-16 00:03:57 · 2004 阅读 · 0 评论