![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习笔记
nulizhuanzhu
High cohesion and low coupling
展开
-
数据处理——C++
原因在于,a和b都是int类型,其计算的结果也是int类型,而非float类型,如果想输出0.6666,需要将a和b的类型改成double或者float。上面代码的结果是c=0.0000。原创 2022-07-15 00:14:09 · 248 阅读 · 0 评论 -
友元、异常
学习了友元和异常的相关内容,在此做个笔记。一、友元一个类可以拥有友元函数,也可以拥有友元类友元函数或者友元类的所有方法都可以访问原始类的私有成员和保护成员友元只能由类自己定义,不能从外部强加友情,所以与面向对象的编程思想不矛盾友元类的场景:电视机与遥控器:遥控器可以更换频道,还可以控制输入源等,适合作为电视的友元类友元声明可以在类的私有,保护或者公有部分,位置无关紧要可以只让类的某一成员函数作为另一个类的友元函数,不过声明的时候需要用到前向声明(c++ primer plus p492有介绍)A可以成为B的原创 2022-06-30 23:58:03 · 222 阅读 · 0 评论 -
C++多态笔记
1、基类指针可以在不进行显式转换的时候指向派生类的对象,引用也是。例如:Brass是BrassPlus的父类。则如下代码是可以的:2、基类指针或引用不能调用派生类的方法。如果基类指针可以调用派生类方法,则会出现类似如下情况:BrassPlus中的成员变量age是Brass类没有的,如果调用setAge()方法,是没有意义的,因为在基类中不存在这个变量。3、如果一个函数在基类中被声明为虚函数。在通过引用或者指针进行调用的时候将会确定使用哪一种方法。例如:......原创 2022-06-09 00:38:11 · 105 阅读 · 0 评论 -
指针传递,引用传递的区别
talk is cheap, show me the code.所以我们直接上代码看区别:#include <iostream>using namespace std;void swap1(int &a, int &b) { int temp = a; a = b; b= temp;}void swap2(int *a, int *b) { int temp = *a; *a = *b; *b = temp;原创 2022-05-30 10:48:11 · 228 阅读 · 0 评论 -
成员初始化列表
如果我有一个类如下:class A { private: const int qsize; public: A(int qs = 10);}那么下面这种写法是错误的:A::A(int qs) { qsize = qs;}原因是因为,qsize是const的,只能被初始化,不能被赋值,这种情况下,应该怎么办呢?c++给出了答案:成员初始化列表。从概念上说,在执行构造函数时,对象会在执行括号里的代码之前被创建,分配内存,然后原创 2022-05-16 22:45:24 · 809 阅读 · 0 评论 -
cin.getline()方法使用的坑
今天本来想练习下指针指向对象的使用,结果在使用getline接收键盘输入的时候碰到一个很坑的问题,搞了半天才找到原因,所以要记录下。先贴一段代码:#include "string1.h"#include <iostream>using namespace std;const int ArSize = 10;const int MaxLen = 81;int main() { cout << "please enter your name:" <&原创 2022-05-10 23:27:42 · 401 阅读 · 0 评论 -
#pragma pack()的作用
今天有同事问我#pragma pack(1)是干嘛的,之前没用过,遂百度。原来这东西是用来指定内存对齐方式的。我们知道,定义一个struct的时候,其默认分配空间为4的倍数。但是用#pragma pack(1)之后,其分配的空间就是1的倍数了,也就是网上说的内存连续。举个例子:Struct A { char a; double b;};这个时候我去查看Struct A的sizeof,会发现值为16,这是因为内存对齐(如果不知道为啥是16,可以百度下内存对齐机制)。原创 2022-05-10 23:18:09 · 248 阅读 · 0 评论 -
友元-2021.12.12
1.友元有三种:友元函数 友元类 友元成员函数通过让函数成为类的友元,可以让此函数访问权限与类成员函数相同。2.为何需要友元?在为类重载二元操作符时,常需要友元。具体在此不展开来讲。3.创建友元创建友元函数的第一步是将其原型放在类声明中,并在原型声明前加上关键字friend。:friend Time operator* ();需要注意:此函数不是类的成员函数,不能使用成员运算符来调用,定义时也不能使用Time::限定符。 虽然此函数不是成员函数,但其访问权限与后者相同原创 2021-12-12 21:49:18 · 165 阅读 · 0 评论 -
牛客网算法题——中秋节分月饼
题目描述:中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,单人份到最多月饼的个数为Max1,单人分到第二多月饼的个数是Max2,Max1-Max2<=3,。同理,单人分到第n-1多月饼的个数是Max(n-1),单人分到第n多月饼的个数是Max(n),Max(n-1)-Max(n)<=3。请问有多少种分月饼的方法?思路:当时没有做出来,事后在网上找了下答案,发现思路讲的不是很清楚,于是自己按照答案捋了一遍,终于搞明白了:先将m个.原创 2021-10-30 18:06:35 · 3568 阅读 · 1 评论 -
C++——虚函数和纯虚函数
虚函数的引入:为了实现C++的多态,从而引入了虚函数。将一个函数声明为虚函数,不代表其不能被实现而是为了让基类的指针能调用子类的此函数。比如:class A{ publicvitual func() { cout << "a is called";}}class B:public A { public func() { cout << "b i...原创 2021-09-25 22:56:15 · 73 阅读 · 0 评论 -
友元-2021.09.23
为何需要友元:在为类重载二元运算符(有两个参数的运算符)时,常常需要友元。比如自己写的Time类,乘法运算符中,可以这样写:A = B * 2;这种写法会被转化为:A = B.operator*(2);但是这种写法就有问题了:A = 2 * B;友元的作用就体现出来了:友元:非成员函数,但访问权限与成员函数一样。声明如下:friend Time operator*(double m, const Time &t);函数定义如下:因为其不属于Time类,原创 2021-09-25 22:47:42 · 47 阅读 · 0 评论 -
使用template时的一个坑
#include<iostream>template <typename T>void swap(T &a, T &b);//template <typename T>//void swap(T *a, T *b, int n);void show(int * a);const int Lim = 8;int main() { //using namespace std; int i = 10; int j = 20; std:.原创 2021-08-06 00:46:29 · 430 阅读 · 0 评论 -
函数指针——0730
上例子来说:#include<iostream>using namespace std;const double *f1(const double ar[], int n);const double *f2(const double [], int);const double *f3(const double *, int);int main() { double av[3] = {1112.3, 1542.6, 2227.9}; const double *(*p1) (原创 2021-07-30 00:09:58 · 81 阅读 · 0 评论 -
函数指针——从入门到放弃——0727
先说,函数指针是真的难,连续几个*,真是有够劝退的。简单记录下函数指针的一些内容:1.先简单罗列一下几个函数的原型const double * f1(const double ar[], int n);const double * f2(const double[], int);const double * f3(const double *, int);上述三个原型看上去不同,实际相同。那接下来,如果要声明一个指针,他可指向这三个函数之一,假设指针为p1,应声明如下:con原创 2021-07-27 00:15:49 · 82 阅读 · 0 评论 -
C++练习-0708
链接:https://www.nowcoder.com/questionTerminal/1874d6dff40b483ab683df2921d32bd1来源:牛客网编写一个菜单驱动程序的雏形。该程序显示一个提供4个选项的菜单——每个选项用一个字母标记。如果用户使用有效选项之外的字母进行响应,程序将提示用户输入一个有效的字母,直到用户这样做为止。然后,该程序使用一条switch语句,根据用户的选择执行一个简单操作。该程序的运行情况如下:Please enter one of the follo.原创 2021-07-08 23:16:52 · 96 阅读 · 2 评论 -
C++编程练习
题目:编写一个程序,最多将10个值读入到一个double数组中。程序遇到非数字输入将结束输入,并报告这些数字平均值以及数组中有多少数字大于平均值。code example:#include<iostream>int main() { using namespace std; double dl[10]; int count = 0; int number = 0; int avg = 0; int i = 0; string line; cout <<原创 2021-07-07 23:32:28 · 125 阅读 · 2 评论 -
IO输入输出流——0625
今天看了控制IO的输入输出。直接上代码,没啥好说的。第一部分是ofstream的使用:#include<iostream>#include<fstream>int main() { using namespace std; char automobile[50]; int year; double a_price,d_price; ofstream outFile; outFile.open("carinfo.txt"); cout <<原创 2021-06-25 00:11:22 · 65 阅读 · 0 评论 -
分支语句和逻辑运算符——0623
终于是考完了PMP,搁置近三个月的C++的学习终于是能再度拾起来了。今天开始继续学习,今天内容比较简单,是分支语句和逻辑运算符,因为对于这个比较熟悉,所以不在此进行说明,在此只进行一些新学到的东西的说明。一、cin.get(ch),cin.clear()这个标准输入会经常用到,前者作用是读取键盘输入的一行字符,会将空格等信息也进行展示;后者作用是重置输入——在有错误的输入的时候,重置此错误并可以重新输入二、字符函数库cctype这个库能帮助确定字符是否是大写,数字,标点等工作。举例:原创 2021-06-23 23:59:00 · 63 阅读 · 2 评论 -
C++ 指针与数组-0418
#include<iostream>using namespace std;int main(){ /* //声明特定类型的指针 int *intPoint; double * doublePoint; //给指针赋值,将内存地址赋值给指针,应用&来获取变量地址 //new运算符返回未命名的内存地址 int a = 1; double b = 1.1; intPoint = &a; doublePoint = new double[10]; doubl原创 2021-04-18 11:08:24 · 59 阅读 · 0 评论 -
2021-04-07
#include<iostream>using namespace std;int main(){ double wages[3] = {100.0,200.0,300.0}; short stacks[3] = {1,2,3}; double (*pw)[3] = &wages; short *pt = &stacks[0]; cout << "size of pw= " << (&wages +1) <<endl;原创 2021-04-07 00:19:39 · 59 阅读 · 0 评论 -
C++ access()与stat()的区别与联系
C++ access()与stat()的区别与联系:联系:都可以用来判断文件是否有权限读写区别:access的mode为R_OK,W_OK等,用mode去判断而stat返回值为负时,errno为EACESS,也代表不能获取到文件权限,但是其模式更广,具体可上网自查...原创 2021-04-06 18:05:31 · 531 阅读 · 0 评论 -
C/C++开发环境搭建
开始学习C++,但是电脑空间不是很足,想搭建一个比较节省空间的开发环境,可以不需要IDE。网上找了半天,用了Cygwin64,但是一直没编译成功,然后想换VS,占用空间劝退了。最后静下来研究Cygwin64编译报错问题,终于解决了,在此记录下。我写的内容是一个简单的hello world:#include<iostream>using namespace std;int main(){ printf("hello world!\n"); return 0;}报错内容是:原创 2021-03-08 23:34:11 · 186 阅读 · 0 评论 -
const char *和char * const的区别
如题,今天理解了const char *和char * const的区别。const关键字,意为常量,当一个变量声明为const之后,其值是不可以更改的。const char * p;//解读为:p is a point to const char(p是一个指针,指向const char)这就意味着char * 是不可以改变的,所以以下语句是错误的:char str[] = "hello world";const char *ptr = str;ptr[0] = 'h';因为ptr指向con原创 2021-03-04 00:26:02 · 6480 阅读 · 2 评论