C++笔试复习

基础知识点
  • C++中对象数组在定义的时候全部进行实例化(与Java不同,Java相当于只是定义了一个指针数组,没有进行实例化)

  • 程序的三种基本控制结构是:顺序结构、循环结构、选择结构

  • 一个C++程序开发步骤通常包括:编辑、编译、链接、运行和调试

  • 面向对象程序设计主要有四个特点:抽象、继承、多态、封装

  • C++中的两种代码复用方式:继承和模板

  • 类是某一类对象的抽象,对象是类的具体实例,类和对象的关系是一种数据类型与变量的关系

  • 构造函数的作用是再创建对象的时候初始化对象的数据成员

  • 默认构造函数有两种:无参构造函数和所有参数都有默认值的构造函数(两者不能同时存在)

  • 常对象只能调用它的常成员函数,不能调用普通函数

  • 如果一个类没有定义默认构造函数,但是定义了其他构造函数(有参的),编译器将不会自动生成默认构造函数(此时如果派生类中没有显式调用父类的有参构造函数将会编译出错)

  • cinistream类的对象

  • 转换构造函数只有一个参数,可以隐式地将其他类型转换成该类类型。可以用explicit杜绝编译器的隐式转换。与之对应的还有类型转换函数,可以将类类型转换成其他类型。详见:C++转换构造函数和类型转换函数

  • 析构函数的作用是提供一个在对象删除前释放该对象占用资源的机会

  • 构造函数顺序和析构函数相反

  • 构造函数顺序:虚基类->普通基类->成员对象->当前类详见:C++派生类含有成员对象构造函数析构函数顺序

  • 拷贝构造函数的使用:

    • 复制对象把它作为参数传递给函数
    • 复制对象从函数返回这个对象
    • 初始化另一个对象(必须是定义的时候,赋值不算)
  • 重载和函数的返回值没有关系,只和函数名以及函数参数列表有关。派生类中只要函数名字和基类相同就会重写。重写以后我们将无法直接通过派生类对象访问基类的同名函数,只能通过基类名::显式访问

  • 需要注意保护的成员我们也不可以通过对象访问

  • this指针:在每一个非静态成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this指针。他是指向本类对象的指针,他的值是当前被调用的成员函数所在对象的起始地址。这样同一个类创建的多个对象共用同一份成员函数的拷贝也知道是取哪一个对象的成员数据。如果派生类中含有和基类相同名字的成员函数就会重写

  • 要实现动态联编一般通过对象指针调用虚函数

  • 在C++面向对象程序设计框架中是程序的基本组成单位

  • delete只能释放用new运算符分配的内存

  • 静态数据成员只能在类外定义和初始化,格式为

    数据类型 类名::变量名=初值;
    

    不需要static关键字

  • 编译器自动生成的拷贝构造函数可能会产生什么问题:当对象有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将对象的数据成员赋值赋给另一个对象,而布恩那个将该对象中指针所指向的内存单元也复制一份。这样就可能出现同一内存单元释放两次,或者传递参数后实参中的地址无效,导致程序运行出错。

  • 使用虚基类是为了解决多重继承中的二义性问题

  • 静态函数没有this指针

  • 描述友元函数的时候应该说明是哪个类的友元函数

  • 拷贝构造函数同样是构造函数,因此和构造函数的调用顺序一样,调用顺序为虚基类->基类->成员对象->拷贝构造函数

#include<iostream>
#include<string>using namespace std;class A
{int val;
public:A(){val = 0; cout << "A():" << val << endl;}A(int v){val = v; cout << "A():" << val << endl;}
};class B :public A
{A obj;
public:B(int v1, int v2) :A(v1), obj(v2){cout << "B()" << endl;}B(const B& x){cout << "Copy B()" << endl;}
};int main()
{B obj1(2, 3);B obj2(obj1);
}

运行结果:
在这里插入图片描述

  • 结构化的程序设计与面向对象的程序设计:结构化的程序设计将数据和对数据的操作分离,程序是由一个个函数组成的。面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。
  • 类和结构体都是C++中用户自定义的数据类型。
  • 从实现的角度来讲,多态性可以划分为两类:静态多态性、动态多态性
虚函数
  • 不能声明为虚函数的函数:普通函数、构造函数、静态函数、内联成员函数、友元函数。成为虚函数的特点是:可以被重写/重载,可以在运行时才确定。详见:C++不能被声明为虚函数
  • 虚函数用于实现动态多态性
  • 纯虚函数实在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。含有纯虚函数的类称为抽象类,抽象类不能被实例化(可以定义指针和引用),必须由他的派生类完成对纯虚函数的定义
友元函数
  • 友元函数不是成员函数,破环隐蔽性,尽量减少使用。友元函数可以提高程序运行效率,节约了调用类成员函数的开销
运算符重载
  • 不能进行重载的运算符:.成员访问运算符.* ->*成员指针访问运算符::域运算符?:条件运算符#预处理运算符,详见:【C++学习笔记四】运算符重载
  • 运算符重载以后,要求其保持原来的操作数个数、优先级、结合性、语法结构
  • 后缀自增运算符的第一个参数(如果还有其他参数的话)必须是int,这样做是为了区分前缀和后缀
  • 运算符函数可以重载为成员函数、友元函数和普通函数。但是有的运算符只能重载为成员函数:= [] () ->
模板
  • 类模板的使用是将上是将类模板实例化成一个类
  • 对于模板类我们只有要用到的时候才会进行实例化:
    • 模板类作为函数声明的参数不会实例化
    • 定义模板类的指针和引用不会实例化
    • 但是如果进行定义时(其他类中含有模板类成员、函数参数或者函数体中含有模板类)以及模板类指针需要访问成员时都会进行实例化。
    • 需要知道模板类大小的操作都需要进行实例化。如new sizeof运算符等。详见:C++类模板实例化条件
继承、基类指针指向派生类对象
  • 私有继承不允许基类指针指向派生类
    • 基类指针只能访问到基类中含有的公有成员
    • 当用基类指针指向派生类对象在动态分配堆上内存的时候,析构函数必须是虚函数
      详见:C++基类指针指向派生类(指针)
流输入流输出
  • 重载流插入运算符<< 重载流提取运算符>>
  • cinistream的对象,coutostream的对象
const的用法

可以阅读这个博客,已经将的超级详细了:传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++函数默认参数

声明是用户可以看到的部分&#xff0c;客户非常信任地使用这个特性&#xff0c;希望得到一定的结果&#xff0c;但是你在实现里使用了不同的缺省值&#xff0c;那么将是灾难性的。因此编译器禁止声明和定义时同时定义缺省参数值。 类的成员函数的参数表在声明时默认参数位于参…

C语言链表各类操作详解

http://blog.csdn.net/pf4919501/article/details/38818335链表概述   链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量&#xff0c;以head表示&#xff0c;它存放一个地址。该地址指向一个元素。…

Java笔试复习

Java程序运行 Java程序的执行必须经过编辑、编译和运行三个步骤 编辑指编写代码&#xff0c;最终形成后缀名为.java的Java源文件编译指使用Java编译器&#xff08;javac指令&#xff09;将源文件翻译为二进制代码&#xff0c;编译后生成后缀名为.class的字节码文件&#xff0c…

数据结构之自建算法库——链栈

http://blog.csdn.net/sxhelijian/article/details/48463801本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第4课时栈的链式存储结构及其基本运算实现。 按照“0207将算法变程序”[视频]部分建议的方法&#xff0c;建设自己的专业基础设施算法库。 链栈算法库采用…

Java类名与包名不区分大小写

刚才写了一个简单的Java程序&#xff0c;经过测试得到一个令人震惊的结论&#xff1a;Java类名和包名是不区分大小写的 可以看一下这个例子&#xff1a; package Test;class aBcdEfG {}class AbCdefg {}public class TTT {public static void main(String[] args){AbCdefg tm…

epoll实现高并发聊天室

http://blog.csdn.net/qq_31564375/article/details/51581038项目介绍 本项目是实现一个简单的聊天室&#xff0c;聊天室分为服务端和客户端。本项目将很多复杂的功能都去掉了&#xff0c;线程池、多线程编程、超时重传、确认收包等等都不会涉及。总共300多行代码&#xff0c;让…

BZOJ2809-左偏树合并

Description 在一个忍者的帮派里&#xff0c;一些忍者们被选中派遣给顾客&#xff0c;然后依据自己的工作获取报偿。在这个帮派里&#xff0c;有一名忍者被称之为 Master。除了 Master以外&#xff0c;每名忍者都有且仅有一个上级。为保密&#xff0c;同时增强忍者们的领导力&a…

处理大并发之一 对epoll的理解,epoll客户端服务端代码

http://blog.csdn.net/zhuxiaoping54532/article/details/56494313处理大并发之一对epoll的理解&#xff0c;epoll客户端服务端代码序言&#xff1a;该博客是一系列的博客&#xff0c;首先从最基础的epoll说起&#xff0c;然后研究libevent源码及使用方法&#xff0c;最后研究n…

epoll详解

http://blog.csdn.net/majianfei1023/article/details/45772269欢迎转载&#xff0c;转载请注明原文地址&#xff1a;http://blog.csdn.net/majianfei1023/article/details/45772269一.基本概念&#xff1a;1.epoll是什么&#xff1a;epoll是Linux内核为处理大批量文件描述符而…

数据分割-并查集+set

小w来到百度之星的赛场上&#xff0c;准备开始实现一个程序自动分析系统。 这个程序接受一些形如xixj 或 xi≠xj 的相等/不等约束条件作为输入&#xff0c;判定是否可以通过给每个 w 赋适当的值&#xff0c;来满足这些条件。 输入包含多组数据。 然而粗心的小w不幸地把每组数据…

linux c++线程池的实现

http://blog.csdn.net/zhoubl668/article/details/8927090?t1473221020107 线程池的原理大家都知道&#xff0c;直接上代码了^_^ Thread.h [cpp] view plaincopy #ifndef __THREAD_H #define __THREAD_H #include <vector> #include <string> #inc…

树启发式合并入门

所谓启发式合并&#xff0c;就是一种符合直觉的合并方法&#xff1a;将小的子树合并在大的子树上。 这些问题一般是相似的问题背景&#xff1a;都是树上的计数问题&#xff0c;都不能直接从上往下进行暴力&#xff0c;都需要从下往上计数时对子树信息进行运算从而得到父亲节点的…

链栈基本操作

http://blog.csdn.net/jwentao01/article/details/46765517###;栈基本概念&#xff1a; 栈&#xff08;stack&#xff09;是限定在表尾进行插入和删除操作的线性表&#xff08;或单链表&#xff09;。 //只能在一段进行插入和删除&#xff0c;因此不存在&#xff0c;在中间进行…

Linux网络编程---I/O复用模型之select

https://blog.csdn.net/men_wen/article/details/53456435Linux网络编程—I/O复用模型之select 1. IO复用模型 IO复用能够预先告知内核&#xff0c;一旦发现进程指定的一个或者多个IO条件就绪&#xff0c;它就通知进程。IO复用阻塞在select或poll系统调用上&#xff0c;而不是阻…

UVa12633-Super Rooks on Chessboard-容斥+FFT

题目大意就是给你一个R*C的棋盘&#xff0c;上面有超级兵&#xff0c;这种超级兵会攻击 同一行、同一列、同一主对角线的所有元素&#xff0c;现在给你N个超级兵的坐标&#xff0c;需要你求出有多少方块是不能被攻击到的(R,C,N<50000) 遇到这种计数问题就要联想到容斥&#…

Linux网络编程---I/O复用模型之poll

https://blog.csdn.net/men_wen/article/details/53456474Linux网络编程—I/O复用模型之poll 1.函数poll poll系统调用和select类似&#xff0c;也是在指定时间内轮询一定数量的文件描述符&#xff0c;以测试其中是否有就绪者。 #include <poll.h>int poll(struct pollfd…

FFT模板

整理了一下&#xff0c;自己写了一下模板 const double PIacos(-1.0); struct complex {double r,i;complex(double _r0,double _i0):r(_r),i(_i){}complex operator (const complex &b) {return complex(rb.r,ib.i);}complex operator -(const complex &b) {return c…

Linux网络编程---I/O复用模型之epoll

https://blog.csdn.net/men_wen/article/details/53456474 Linux网络编程—I/O复用模型之epoll 1. epoll模型简介 epoll是Linux多路服用IO接口select/poll的加强版&#xff0c;e对应的英文单词就是enhancement&#xff0c;中文翻译为增强&#xff0c;加强&#xff0c;提高&…

POJ 1741tree-点分治入门

学习了一下点分治&#xff0c;如果理解有误还请不吝赐教。 为了快速求得树上任意两点之间距离满足某种关系的点对数&#xff0c;我们需要用到这种算法。 点分治是树上的一种分治算法&#xff0c;依靠树和子树之间的关系进行分治从而降低复杂度。 和其他树上的算法有一些区别…

基于单链表的生产者消费者问题

『生产者与消费者问题分析』「原理」生产者生产产品&#xff0c;消费者消费产品。产品如果被消费者消费完了&#xff0c;同时生产者又没有生产出产品&#xff0c;消费者 就必须等待。同样的&#xff0c;如果生产者生产了产品&#xff0c;而消费者没有去消费&#x…