C++ primer plus
文章平均质量分 59
Kallou
这个作者很懒,什么都没留下…
展开
-
C++ 继承与动态内存分配
假设有基类baseDMA:class baseDMA{private: char* label; int rating;public: baseDMA(const char* l = "null", int r = 0); baseDMA(const baseDMA& rs); virtual ~baseDMA(); baseDMA& operator=(const baseDMA& s); friend ostream& opera...原创 2022-04-12 00:14:27 · 603 阅读 · 0 评论 -
静态联编、动态联编以及虚函数的工作原理
1.什么是静态联编和动态联编?程序调用函数时,要是用哪个可执行代码块呢?编译器负责完成这个问题,在编译阶段编译器会将函数调用解释为去到某个地址执行代码块,这称为函数名联编。在C++中,由于存在重载,编译器需要查看特征标来确认到底是用哪个函数,C++的编译器也可以在编译阶段完成这项工作,这称为静态联编。而虚函数的存在使得C++编译器无法在编译阶段完成这项工作,比如之前的例子中的基类指针数组,根据数组中具体存放的是基类对象还是派生类对象,才能确定调用哪个虚函数,这在编译阶段是不确定的...原创 2022-03-28 18:35:03 · 793 阅读 · 0 评论 -
多态与虚函数
1.什么是多态?多态即派生类重写了基类的方法,基于创建的对象是派生类还是基类,同名的方法会有不同的功能,这称为多态。2.在存在多态的情况下,通过对象调用方法和通过引用或指针调用方法有何不同?设类A有方法fun(),类B是类A的派生类,B重写了fun()方法:当使用对象来调用方法时:A a;B b;a.fun();//使用A的fun()b.fun();//使用B的fun()即根据对象类型调用相应方法...原创 2022-03-28 18:25:28 · 191 阅读 · 0 评论 -
关于为使用定位new运算符声明的类对象指针调用析构函数时出现的三个问题
前面学习到通过new运算符创建的对象指针只有通过显式的使用delete才能调用析构函数。那如果对象指针使用的是定位new运算符,要如何确保析构函数被调用呢?看以下例子:#include<iostream>using namespace std;class A{private: int num;public: A(const int n) { num = n; cout << num << " constructed" << endl; }原创 2022-03-24 17:11:59 · 382 阅读 · 0 评论 -
如何打印字符串指针的地址?
对于其他类型(othertype)的指针来说,指针名即地址:othertype* typename;cout << typename;但对于字符串指针来说,直接显示指针名将输出整串字符:char* str = "Hello World";cout << str;//输出 Hello World需要使用强制类型转换,将字符串指针转换为空指针类型:cout << (void*)str;这样做的原因暂时没找到,后续补充。...原创 2022-03-24 16:05:53 · 2171 阅读 · 0 评论 -
C++ 拷贝(复制)构造函数
拷贝构造函数用以将一个类的对象拷贝给同一个类的另一个对象,比如之前学习过的string类:string s1;string s2 = s1;一般情况下的拷贝构造函数:class A{private: int n; double d; char s;public: A(const A& a);};A::A(const A& a){ this->n = a.n; this->d = a.d; this->s = a.s;}即按原创 2022-03-19 22:38:33 · 6857 阅读 · 0 评论 -
如何初始化类中的静态变量?
在编程时会遇到这样的需求:统计某个类被实现了多少次?可以通过在类中声明一个静态成员变量来实现:class A{private: static int num_A;public: A(); }对于这样的一个静态成员变量,如何保证其在类多次创建的过程中只会初始化一次?错误的操作:1.在放置类的头文件中对其初始化,当该头文件被多个程序include时,num_A会被多次初始化,且将引发错误。2.在构造函数中对其初始化,当该类被实现时,num_A会被迫原创 2022-03-19 17:43:06 · 3948 阅读 · 0 评论 -
C++中rand()函数的用法
1、rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。2、如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100; 这样,num的值就是一个0~99中的一个随机数了。3、如果要产生1~100,则是这样:int num = rand() % 100 + 1; 4、总结来说,可以表示为:int num = rand() % n +a; 其中的a是起始值,n-1+a是...转载 2022-03-17 17:04:00 · 37868 阅读 · 4 评论 -
C++ 两种声明动态数组方式的区别
在使用new申请动态数组时通常有两种做法:int *p0;p0 = new int[2];int *p0 = new int[2];一般来说,二者是等价的,但有时会出现一些意想不到的bug,举例:#include<iostream>using namespace std;int main(void){ int Len; int *p0 = new int[Len]; cout << "Input Len: "; cin >>原创 2022-03-09 01:30:00 · 406 阅读 · 0 评论 -
混合使用cin>>和cin.get()的问题
1、cin>>和cin.get()如下示例代码会到导致cin.get()语句被跳过,不等用户输入数据。char ch; int number; cout << "Enter a number: ”;cin >> number; // 读取整数cout << "Enter a character: ";ch = cin.get() ; // 读取字符cout << "Thank You!\n";在示例代码段中,当转载 2022-03-04 19:37:13 · 302 阅读 · 0 评论 -
C++ 字符串指针和字符串指针数组详解
C++处理字符串有两种方式,即:指针方式和数组方式数组方式:char a[] = "HelloWorld"; 指针方式:const char* s= "HelloWorld"; const可以忽略接下来详细讲解一下字符串指针首先,为什么字符串可以直接赋值给指针,即char* s = "HelloWorld"不会报错,不应该是把字符串的地址赋值给指针吗?原因:这里的双引号做了3件事:1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0' 3.返回地址为...转载 2022-03-02 20:55:25 · 9349 阅读 · 7 评论 -
C++ 获取string字符串长度的三种方法
1.用string的成员方法length()获取字符串长度length()比较直观,表示的就是该字符串的长度。#include <string> #include <iostream> using namespace std; int main() { string str = "my string"; cout << str.length() << endl; return 0; }转载 2022-03-01 02:28:22 · 28831 阅读 · 3 评论 -
《C++ primer plus》读书笔记二:基础语法(第五章)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分原创 2021-10-13 11:30:26 · 130 阅读 · 0 评论 -
《C++ primer plus》读书笔记一:基础语法(第四章)
C++ primer plus 第四章:复合类型目录一、数组二、字符串string类三、结构struct四、共用体union五、枚举enum六、指针:使用new在运行阶段分配内存和释放内存delete七、模板类vector和array放到第十六章详细讲一、数组数组的创建:typeName arrayName[(arraySize)],如 int num[10];数组的初始化:int num[10] = {1,3,5,7};int num[1原创 2021-10-04 19:03:59 · 157 阅读 · 0 评论