
c++
shine_zyd_way
这个作者很懒,什么都没留下…
展开
-
c++用引用实现俩个数的交换
#include <iostream>#include <stdlib.h>using namespace std;void swap(int &a, int &b){ int tmp = a; a = b; b = tmp;}int main(){ int a = 3; int b = 4; swap(a, b); cout <原创 2016-09-27 20:15:37 · 3594 阅读 · 1 评论 -
类的继承
首先让我来先介绍一下继承的概念: 继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。简而言之就是可以讲已有的类进行一定功能的延续。被继承的类称之为基类(父类),继承了功能的类叫做派生类(子类),在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 继承的定原创 2016-11-03 08:39:25 · 450 阅读 · 0 评论 -
this指针
一.this指针的主要用途: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也即,即使没写this指针,编译器在编译的时候也会加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。 二.t原创 2016-11-06 17:10:42 · 378 阅读 · 0 评论 -
String类的自我认知(浅拷贝、深拷贝、写时拷贝)
浅拷贝 1.浅拷贝是所有对象都共用一块空间,一个对象改变,所有对象都跟着改变,在调用析构函数的时候,也会发生错误,会释放已经释放的空间。class String{public: String(const char* pstr = "")//构造函数 :_pstr(new char [strlen(pstr)+1]) { if (pstr == N原创 2016-11-05 20:44:23 · 310 阅读 · 0 评论 -
类的多态
1、多态的定义 多态指同一个实体同时具有多种形式。它是面向对象程序设计的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。原创 2016-11-13 11:48:25 · 2030 阅读 · 0 评论 -
c语言模拟实现c++的继承多态
c++有封装、继承和多态三大特性,其中多态分为静态多态与动态多态,动态多态是通过虚函数实现的,一个类中如果有虚函数,那么就需要维护一张虚表来存放虚函数的地址,c语言中我们用结构体来模拟类。 代码如下: 其中A模拟父类,B模拟子类#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>void funA()原创 2017-08-01 11:05:06 · 285 阅读 · 0 评论 -
一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高
我们可以这样入手,比如给一个3*3的二维数组,从每一行的最大值开始比较: 1.如果X大于a[0][2],第一行中的数据肯定都比x小,所以继续跟下一行的a[1][2]比较 2.如果X小于a[0][2],第3列中的数据肯定都比x大,所以继续跟上一列的 a[0][1]比较 3.循环条件为行数>=0;列数<=n-1; 实现代码如下:#define M 3#define N 3bool Find原创 2017-08-02 09:03:34 · 913 阅读 · 0 评论 -
给定一个整数N,那么N的阶乘N!末尾有多少个零呢?
我们知道最小的两个数相乘能出来0的就是2和5了,那么对于所有整数来说,能被2整除的数要多于能被5整除的数,所以这道题的解题思路就是:判断从1-N这些数中一共有包含的5的个数。 代码如下:int NumZero(int n){ int count = 0; for (int i = 1; i <= n; i++)//找寻1-n中每个数字包含的5个个数的总和 {原创 2017-08-02 09:11:00 · 1271 阅读 · 0 评论 -
一个数组中有一个数字的次数超过了数组的一半,求出这个字符
首先我们想到的就是排序,排序完成后找到中间的数字即为数组中超过一半的数字,但是后来又想想,数据特别多的话排序就显得力不从心。 本题可以用标志位来标记数据:首先记录一个数据,继续遍历下一个数据,如果数据以第一个相同,就将标志位加一,继续下一个数据,要是不相同就将标志位减一,如果标志位为0.重新记录数据int findhalf(int *a, int sz){ int flag = 0;原创 2017-08-02 09:38:21 · 308 阅读 · 0 评论