
C++
C++学习
Sugar-k
这个作者很懒,什么都没留下…
展开
-
类的继承方式
从基类继承的成员,其访问属性可以由继承方式控制。类的成员可以有public、protected和private三种方式。类的继承方式也可以有public、protected和private三种。不同的继承方式导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类中的私有成员不可以直接访问。当类的继承方式为私有继承时,基类中公有成员和保护成员的访问属性都以私有成员身份出现在派生类中,而基类中的私有成员不可以直原创 2021-04-25 22:54:55 · 1038 阅读 · 0 评论 -
指针与引用
指针与引用有许多相似之处,如都可以使用它们作为形参,都可以通过该参数修改函数中的变量以达到参数双向传递的作用,都可以避免值的复制从而减少函数数据传递的开销。引用和指针变量存储的都是被引用变量的内存地址。但是指针是一种较为底层的机制,而引用是一种较为高级的机制。在具体的实现机制中,两者殊途同归都需要借助地址。此外,指针可以多次改变它所指向的地址,而引用只能在初始化的时候指定被引用的对象。因此,引用的作用和指针常量差不多。使用指针作为函数参数,在主调函数中需要用&操作符传递参数,在被调函数中使用*操原创 2021-04-24 21:54:53 · 115 阅读 · 0 评论 -
代码的编译执行与连接
编译编译对每个cpp源文件进行分别处理,生成.o目标文件。目标文件用来描述程序在运行过程中需要放在内存中的内容,内容包含两大部分代码和数据,因此目标文件包括代码段和数据段。代码段代码段包含源文件中定义的各个函数编译后得到的目标代码。数据段数据段中包含源文件中定义的各个静态生存期对象的描述。数据段又分为初始化的数据段.data和未初始化的数据段.bss。对于初始化的静态生存期对象,需要在目标文件中提供相应的空间存放其初值。未初始化的静态生存期对象,只需记录这个段的大小。符号表符号表用来原创 2021-04-21 17:16:40 · 294 阅读 · 0 评论 -
野指针和悬空指针
野指针野指针 就是不确定具体指向的指针,通常是没有初始化的指针。int *p;//野指针悬空指针指向被释放内存的指针。int *p = 1;free(p);//现在是悬空指针p = NULL;//为了避免出现这种错误,在释放内存后通常将其赋值为NULLint main(){ char *p = NULL; for(i=0;i<1;i++){ char c;//c的生命周期在局部 p = &c; } //此时p成为了悬空指针}...原创 2021-04-20 10:43:30 · 166 阅读 · 0 评论 -
C++各种类型常量
常对象class c{public: c(int i,int j){ x = i; y = j; } private: int x,y;};c const b(1,2); //无法更新常对象b常成员函数使用const关键字说明的函数;不更新对象的数据成员;const关键字可以被用于参与对重载函数的区分;通过常对象只能调用其常成员函数;#include <iostream>using namespace std;class R{public: R原创 2021-04-19 20:54:22 · 433 阅读 · 0 评论 -
友元
类能够将数据和处理数据的函数封装在一起,从而实现数据的共享与隐藏。但有时候我们需要让其他类或者函数访问到类中隐藏的数据或者函数,友元就能够帮助我们完成这一需求。友元提供了一种在不同类的成员函数与一般函数之间数据共享方式。友元函数友元函数是在类中用关键字friend修饰的函数,可以访问该类中的私有成员和保护成员。友元类友元类是在类中用关键字friend修饰的类,可以访问该类中的私有成员和保护成员,且类中的所有函数都为另一个类的友元函数。#include <iostream>using原创 2021-04-17 12:59:07 · 107 阅读 · 0 评论 -
对象的生存期
对象有诞生和消亡的时刻,对象从诞生到结束的时间就是其生存期。在生存期内对象将保持其状态,变量将保持其值不变。对象的生存期可以分为静态生存期和动态生存期两种。静态生存期静态生存期与程序的运行期相同,在命名空间作用域声明的对象都是具有静态生存周期,在函数的局部作用域可以通过关键字static来声明。不会每次函数调用都生成一个副本;不会随着函数返回而失效;变量可以在每次调用间共享;动态生存期动态生存期产生于声明点,结束于声明所在的块执行完毕之时。#include <iostream>原创 2021-04-15 11:26:37 · 962 阅读 · 0 评论 -
构造函数与析构函数
# include<iostream>using namespace std;class Box{ public: Box(double length=1.0,double width=2.0,double height=3.0) { cout << "constructor called" << endl; this -> length = length; th.原创 2021-04-13 15:49:31 · 90 阅读 · 0 评论 -
面向对象
面向对象程序的主要特点是:抽象、封装、继承和多态。抽象抽象是指对具体问题进行概括,抽出一类对象的公共性质并加以描述。抽象通常包括两个方面:面向数据抽象和面向行为抽象。比如,不同的箱子拥有相同的属性长、宽、高,这可以被视作面向数据抽象。我们也可以根据箱子这些属性求得其面积或者体积,这可以视作面向行为抽象。封装封装就是将抽象得到的数据和行为相结合,形成一个整体(类)。对于一个类而言,其数据和函数都是其成员。class Box{public: void set(int l,int w,int h);原创 2021-04-12 16:49:58 · 74 阅读 · 0 评论 -
联合(共用体)
程序中有时会使用一个变量来处理不同的数据类型,对这种情况可以使用联合。联合由关键字union定义,也称共用体。union un{ char c; int i; float f; double d;};un x;x.c = 'a';//其他成员不可用x.d = 3.14;//覆盖了成员c的内容union的每个成员都从联合变量的首地址开始存储;每次只能使用一个成员;union可以节省空间;容易出错;...原创 2021-04-11 14:55:37 · 100 阅读 · 0 评论 -
结构体
概念结构体将一组来自不同类型的数据组合在一起构成复合类型,其中每个数据都是结构体的成员。struct st{ char c; int i;};st s;访问结构体类型的变量通过.来访问;结构体类型的指针通过->来访问;st* ps = &s;//ps为结构体类型的指针s.c = 'a';s.i = 2;ps->i;//通过结构体类型指针来引用成员i内存占用编译器为了提高访问效率,采用边界对齐技术,计算机指令是以机器指令为单位在内存中存取数据的。以3原创 2021-04-10 21:43:28 · 89 阅读 · 0 评论 -
声明和头文件
一个C++程序由多个文件组成,源文件后缀一般为cpp,头文件后缀为h。C++语言的编译器通常采用分别编译的方式,以源文件为单位进行编译。分别编译是指先分别编译各个源文件中的程序段,生成各自的目标程序,最后通过链接器将各段目标程序连接成一个完整的可执行程序。多文件编译优点支持大型程序创建,易于并行开发;易于修改,某段代码出现错误不需要重新编译整个程序;便于代码复用;声明和头文件包含全局变量和函数可以在程序的所有源文件中使用。在一个源文件中使用其他文件中定义的全局变量需要对它们进行声明。而头文件原创 2021-04-05 13:02:58 · 456 阅读 · 0 评论 -
static数据成员
静态数据被看作类类型内的全局变量。对于非静态数据成员,每个对象都有自己的副本,而静态数据成员在整个类种只有一份,可以被类的所有对象共享访问。与全局变量相比,静态数据成员有以下两个优点:静态数据成员没有进入程序的全局作用域,只是在类的作用域内;可以实现信息隐藏,静态成员可以是private成员,而全局变量则不能;class obj{ static int cnt;//静态数据成员 public: //构造函数中应当存在cnt obj(){cnt++;} ~obj(){cnt--;}原创 2021-04-04 10:18:31 · 727 阅读 · 0 评论 -
new和delete
在C++中对象既可以动态分配内存,也可以静态分配内存。静态分配:在程序运行之前进行,分配效率较高;动态分配:用于存储未知数目的元素,灵活性较高;动机程序不知道自己需要使用多少对象;程序不知道所需对象的准确类型;程序需要在多个对象间共享数据;区别静态对象有名字,而动态对象没有名字;静态对象可以直接操作,动态对象需要通过指针间接操作;静态对象空间的处理与释放由编译器自动处理,而动态对象的空间分配与释放需要程序员显示处理;newnew运算符在堆上分配空间,创建对象,原创 2021-04-03 17:40:37 · 98 阅读 · 0 评论 -
对象指针
对象在初始化后都会在内存空间中占有一定空间;既可以通过变量名也可以通过对象地址来访问对象;对象同时包含函数与数据;对象所占据的内存空间只是用于存放数据成员;访问对象成员对象指针名 -> 成员名;类名 * 对象指针名;对象指针使用前需要将其初始化,初始化一个声明过的对象;通过对象指针可以访问对象的公有成员;...原创 2021-04-01 20:23:03 · 119 阅读 · 0 评论 -
形参与函数指针
强行指针输出数组元素# include<iostream>using namespace std;int main(){ int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ cout << *(*(arr+i)+j) << " "; } cout << endl; } return 0;原创 2021-03-31 16:14:47 · 195 阅读 · 0 评论 -
各种类型的指针
规则地址中存放的数据类型与指针类型相同;指针变量的赋值必须是地址常量或者变量,不能是整数;可以使用0作为空指针;指针类型表示所指向的数据的类型而非其自身类型;void类型的指针,该对象可以被赋予任意类型对象的地址;指向常量的指针不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的地址;int a;const int *p = &a;*p = 1;//报错,无法修改所指向变量的值int b;p = &b;//正确,可以修改指针变量存储的值指针类型原创 2021-03-30 15:47:11 · 859 阅读 · 0 评论 -
指针基础
概念指针:内存地址,用于间接访问内存单元;指针变量:专门用于存放地址的变量;初始化存储类型 数据类型 *指针名 = 初始地址;int a;int *ptr = &a; 整型指针变量ptr存储整形变量a的地址;其中&为地址运算符,&a即获取变量a在内存中的起始地址。注意事项用变量地址作为初值时,该变量必须在指针初始化之前声明过,且变量类型与指针类型一致。可以用一个已赋初值的指针来初始化另一个指针变量。不能用一个内部auto变量的去初始化static指针原创 2021-03-29 23:52:14 · 78 阅读 · 0 评论 -
打印前五十个素数
步骤判断一个数是否为素数;若number不是素数则在2,3,…,number/2之间必有一个数能将其整除;依次判断每个数;统计为素数的个数;每行打印十个素数;C++实现输出原创 2021-03-27 16:34:48 · 211 阅读 · 0 评论 -
回文数判断
定义回文数是指各位数字左右对称的数,如121,131,11等。目标寻找11~999之间的数字m,使得其满足m、mm、mm*m均为回文数。思路使用除以10取余的方法,从低位开始至高位;以低位充当高位反序形成新的数字;比较生成数字与原数字是否相等;C++实现输出结果...原创 2021-03-26 16:49:13 · 1222 阅读 · 0 评论 -
绪论
原创 2021-03-23 22:53:43 · 89 阅读 · 0 评论