c++学习
yhblog
虚拟世界里面有很多值得我们学习,深思的东西!
展开
-
指针常量、常量指针、指向常量的指针常量的区别以及数组名的本质
1、指针常量(*const):对应指针变量,即指针本身是常量,指针指向的内容可以被修改。数据类型 * const 指针变量=变量名(或取地址); int* const p;2、常量指针(const*):常量的指针,即指针指向的内容不能被修改,但指针本身是变量,可以被修改。数据类型 const * 指针变量=变量名(或取地址); int const* p...原创 2019-12-17 20:50:01 · 503 阅读 · 0 评论 -
c++文件操作大全
基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct { int level; /* fill/empty level of buffer */ unsigned flags...转载 2019-12-05 19:36:22 · 242 阅读 · 0 评论 -
常量和静态的区别和详解
常量函数: 你在 int f(int s) 后面加了一个const(int f(int s) const),表示这函数是常函数(只能被常量对象或指针或引用调用)。常量函数调用规则:常量函数不能修改除了静态成员变量以外的变量常量函数不能调用除了静态成员函数以外的其他函数可以调用静态成员函数可以对静态成员变量进行操作常量对象、常量指针、常量引用使用const关键字创建。不希望某...原创 2019-11-25 19:42:24 · 2422 阅读 · 0 评论 -
函数默认参数和函数调用传参匹配原则
C++中允许为函数提供默认参数,又名缺省参数。使用默认参数时的注意事项:① 有函数声明(原型)时,默认参数可以放在函数声明或者定义中,但只能放在二者之一。建议放在函数声明中。double sqrt(double f = 1.0); //函数声明double sqrt(double f) //函数定义{ // .... } ② 没有函数(原型)时,默认参数在函数定义时指...原创 2019-11-21 10:02:23 · 3699 阅读 · 0 评论 -
详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现1.构造函数构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)首先说一下一个C++的空类,编译器会加入哪些默认的成员函数默认构造函数和拷贝构造函数析构函数赋值函数(...原创 2019-11-20 20:03:09 · 3021 阅读 · 0 评论 -
new创建对象是否调用构造函数和析构函数
1.指针不会调用构造和析构函数,只是定义了一个指针,没有申请内存:使用new创建对象时,申请分配内存,调用构造函数:当我们使用new为指针开辟空间,然后用delete释放掉空间会分别调用构造和析构函数:...原创 2019-11-18 19:50:29 · 11353 阅读 · 4 评论 -
对象指针接收new创建的对象(申请的内存空间)
参考: https://www.cnblogs.com/wpcblog/p/3503199.html二、new创建类对象实例1、new创建类对象例子:CTest* pTest = new CTest();//pTest指针指向的该对象的入口地址delete pTest;pTest用来接收类对象指针。不用new,直接使用类定义申明:CTest mTest;此种创建方式,使用完后不...转载 2019-11-18 19:36:17 · 1997 阅读 · 0 评论 -
c++重载,重定义,重写(覆盖)的简单区别
重载:1.在同一个作用域下(即同一个类中),函数名相同,函数的参数不同(参数不同指参数的类型或参数的个数不相同)2.不能根据返回值判断两个函数是否构成重载(只能根据参数列表的个数、类型、顺序 判断)。3.当函数构成重载后,调用该函数时,编译器会根据函数的参数选择合适的函数进行调用。4.重载是一种语言特性,是一种语法规则,与多态无关,与面向对象无关重定义(隐藏):1.在不同的作用域下(...原创 2019-10-31 09:47:09 · 963 阅读 · 0 评论 -
c++自定义输出格式
按照要求格式输出常用方法有两种问题:按如下格式输出时间YY:MM:SS第一种方法:重载流操作符<< ,代码如下Time.h头文件//Time.h头文件#ifndef TIME_H_INCLUDED#define TIME_H_INCLUDEDusing namespace std;//必须要加class Time{private: int seco...原创 2019-10-30 17:14:22 · 1310 阅读 · 0 评论 -
C++中const在函数名前面和函数后面的区别
const常规用法如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。char greeting[] ="Hello"; char* p= greeting; \\ non-const pointer,non-const dataconst char* p =greeting;...原创 2019-10-29 22:01:18 · 1362 阅读 · 3 评论 -
c或c++的数组和二维数组
数组名细节: 1)数组首元素的地址和数组地址是两个不同的概念 2)数组名代表数组首元素的地址,它是个常量。 解释如下:变量本质是内存空间的别名,一定义数组,就分配内存,内存就固定了。所以数组名起名以后就不能被修改了。 3)数组首元素的地址和数组的地址值相等 4、怎么样得到整个一维数组的地址?C语言规定:Int a[10];printf(“得到整个数组的地址a: %d ...原创 2019-10-07 14:43:49 · 250 阅读 · 0 评论 -
为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题。类声明:class Screen; //Screen类的声明类定义:class Screen{ //Screen类的定义 //etc...}; 当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确...转载 2019-10-06 08:12:35 · 926 阅读 · 0 评论 -
c++项目导入头文件声明及定义
代码如下:Shape.h#ifndef SHAPE_H_INCLUDED#define SHAPE_H_INCLUDEDclass Shape{public: virtual float GetPircumference()=0;};class Rectangle:public Shape{private: float R_a; float ...原创 2019-10-04 22:07:26 · 2587 阅读 · 1 评论 -
c++项目结构规范
头文件(.h):写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):#ifndef CIRCLE_H#define CIRCLE_H//你的代码写在这里#endif 这样做是为了防止重复编译,不这样做就有可能出错。至于CIRCLE_H这个名字...转载 2019-10-04 20:01:44 · 3801 阅读 · 0 评论 -
C++中拷贝构造函数被调用的三种情况
C++中的构造函数c++中的构造函数分为构造函数,和拷贝(复制)构造函数,相比于构造函数,复制构造函数使用更加方便,快捷。构造函数可以有多个,而拷贝构造函数只能有一个,因为拷贝构造函数的参数只能是当前类的一个对象,参数表是固定的,无法重载,若用户没有定义自己的辅助构造函数,系统会自动生成一个复制构造函数(浅拷贝构造函数,只能复制简单变量,一般需要自定义一个深拷贝构造函数,即完全拷贝),其作用是...转载 2019-10-03 18:58:08 · 3931 阅读 · 0 评论 -
函数重载和函数指针定义与调用
定义函数指针的三种方法注:定义的函数指针是函数的执行入口地址(即函数实现代码块的首地址)#define _CRT_SECURE_NO_WARNINGS #include <iostream>using namespace std;//定义几个函数重载函数void func(int a, int b){ cout << a << b <&...原创 2019-09-12 16:08:14 · 443 阅读 · 0 评论 -
c++类的对象作为方法参数(即函数参数)
c++类的对象作为参数传递时,有三种传递方式#include <iostream>using namespace std;//求圆的面积class Mycircle{public: double r; double s;public: double getR(){ return r; } void setR(do...原创 2019-09-12 17:15:07 · 26920 阅读 · 9 评论 -
c++自定义类的对象 做函数参数为什么一定要用 引用传值?
函数参数有直接变量(如int、char、double等)类型、指针类型和引用类型。如果参数是变量,传递方式是传值,就是将实参的值复制(复制,意味着空间消耗和时间消耗)到“栈”空间中。如果参数是指针,传递方式是传址,需将指针复制(同样也消耗空间和时间,对于数组而言,只需存储数组首地址)到“栈”空间中。如果是引用,则既不是传值,也不是传址,主调函数和被调函数共享参数的存放地址,与全局变量共享方...原创 2019-09-14 16:12:59 · 6075 阅读 · 0 评论 -
c++多个类定义在同一个cpp文件中调用报错
测试的正确格式代码:#include <iostream>using namespace std;//定义一个圆类和点类,判断点与圆的内部还是外部等//设计一个点类class Point{//前置声明仍然报错,只有把这个类放Circle类的前面了public: void setPoint(int _x,int _y){ x = _x; ...原创 2019-09-14 16:49:54 · 4844 阅读 · 0 评论 -
c++中静态的实质
静态变量的静态指在整个程序生命周期的地址静止不变。也就是说在整个程序里面只保存有一份拷贝。static关键字允许它在不同的函数调用间保持它的值。如果一个静态变量被访问后值改变,它就会保持新的值。在C++中,类的静态成员(static member)必须在类内声明,在类外初始化。(对于静态成员:静态变量和静态函数,不是属于某个类对象的数据成员,而是多个类对象共享静态变量或静态函数。例如有一...原创 2019-09-17 15:26:57 · 142 阅读 · 0 评论 -
C++调用类头文件为什么只需要include声明部分而不需要类的定义部分
问题:比如C++中新建一个r.h的头文件 ,并在头文件中声明了一个类,然后添加一个源文件r.cpp来定义这个类,定义中使用#include “r.h”;然后再建一个m.cpp中实现主函数,使用#include “r.h”,就能运行得到结果。但是问题是如果使用#include“r.cpp”就会报错。(虽然include是只能导入头文件,意思是为什么m.cpp中不导入类定义cpp文件(具体...原创 2019-09-19 15:09:01 · 2533 阅读 · 1 评论 -
C++工程项目,类的定义与实现为什么不是同时在头文件中实现的
完全是可以的对于小型程序。你把所有类定义、实现、主程序都放到一个文件也是可以的。分开主要是其它的考虑(维护成本、编译时间、隐藏实现、等等),不是 C++ 语言本身的要求。...原创 2019-09-19 15:11:48 · 549 阅读 · 0 评论 -
C++中,为什么子类对象可以赋值给父类对象而反过来却不行
子类继承于父类,它含有父类的部分(除了父类私有属性和私有方法),又做了扩充。如果子类对象赋值给父类变量,则使用该变量只能访问子类的父类部分(因为子类含有父类的部分,所以不会有问题)但是,如果反过来,这个子类变量如果去访问它的扩充成员变量,就会访问不到,因为原变量不包含该部分,会内存越界。指针也遵循这个原则,子类对象的指针可以用父类对象指针来接收赋值,但反过来不行...原创 2019-09-21 11:30:25 · 2093 阅读 · 0 评论 -
c++十大排序算法详解
参考:https://www.cnblogs.com/fnlingnzb-learner/p/9374732.html转载 2019-09-23 17:34:37 · 319 阅读 · 0 评论 -
C++运算符重载的两种方法
有两种方法可以使运算符重载:使重载运算符成为该类的成员函数。这允许运算符函数访问类的私有成员。它也 允许函数使用隐式的this指针形参来访问调用对象。使重载的成员函数成为独立分开的函数。当以这种方式重载时,运算符函数必须 声明为类的友元才能访问类的私有成员。某些运算符(如流输入运算符 >> 和流输出运算符 <<)必须作为独立函数重载。其他运算符既可以作为成员函数也...转载 2019-09-25 16:34:01 · 1953 阅读 · 0 评论 -
C语言数组名和指针的区别?
数组和指针的区别:数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char a[];那么如果出现a = a+1;这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char a[];那么再定义一个char *p = a;然后再用p = p+1是合法的,这...原创 2019-09-28 11:47:48 · 695 阅读 · 0 评论 -
c++中return返回对象的探讨
关于C++的拷贝构造函数问题using namespace std;class Test{public:Test() {}Test( const Test& t){ cout<<1;}Test & operator=(const Test &t){count<<2; return *this;)};Test fun(Test &am...转载 2019-09-30 16:01:04 · 4168 阅读 · 0 评论 -
C++ 数组、二维数组、函数参数
参考:https://www.cnblogs.com/zuosy/p/8580656.html转载 2019-10-01 15:39:33 · 155 阅读 · 0 评论 -
c++引用做函数返回值的理解
(1)以引用返回函数值,定义函数时需要在函数名前加 &(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。引用作为返回值,必须遵守以下规则:(1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。(2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况...原创 2019-09-11 17:26:33 · 1618 阅读 · 0 评论