![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 55
LiBin1103
这个作者很懒,什么都没留下…
展开
-
构造函数
构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安原创 2017-08-29 21:40:45 · 286 阅读 · 0 评论 -
友元函数和友元类
友元函数可能会破环原类的私有属性:声明有缘函数关键字;friend在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函原创 2017-09-02 22:10:07 · 265 阅读 · 0 评论 -
C++模板类
#include using namespace std;template class classA{public: classA(T a) { this->a = a; } void print() { cout a << endl; }private: T a;};/*模板类做函数参数*/void stage(classA &oop){ oop.pri原创 2017-09-10 20:15:03 · 268 阅读 · 0 评论 -
C++模板函数
1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){ 函数体}其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或class)是原创 2017-09-10 11:26:59 · 308 阅读 · 0 评论 -
多态
多态的实例:#include using namespace std;class fighter1{public: virtual int fright(void) { return 10; }};class enemy{public: virtual int enfright(void) { return 15; }};class advancefight原创 2017-09-10 11:23:26 · 281 阅读 · 0 评论 -
抽象类
1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体。 纯虚函数需要在声明之后加个=0;class 基类名>{virtual 类型>函数名>(参数表>)=0; ......};2.抽象类 含有纯虚函原创 2017-09-09 18:50:18 · 230 阅读 · 0 评论 -
浅拷贝与深度拷贝
注意:默认的拷贝是浅拷贝浅拷贝(只是机械的拷贝)public: CopyConstructor() { p = new int(100); } /*析构函数*/ ~CopyConstructor() { assert(p != NULL); delete p; }private: int *p; int width; int height;};in原创 2017-08-31 16:03:31 · 473 阅读 · 0 评论 -
vptr指针
实例;#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;class base1{public: base1() { print(); } virtual ~base1() { cout << "父类1析构" << endl; }public: virtual voi原创 2017-09-08 17:35:35 · 771 阅读 · 0 评论 -
C++中根据一个点推断距离该点某个单位处的点的方法
int main(){ //创建一个用于绘制图像的 空白图 cv::Mat image = cv::Mat::zeros(1024, 19200, CV_8UC3); //输入拟合点 std::vector<cv::Point> points; /*points.push_back(cv::Point(500, 158)); points.push_back(c...原创 2018-03-01 14:26:15 · 528 阅读 · 0 评论 -
CreateThread函数
线程是进程中的一个实体,是被系统独立调度和分派的基本单位。一个进程可以拥有多个线程,但是一个线程必须有一个进程。线程自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于一个进程的其它线程共享进程所拥有的全部资源,同一个进程中的多个线程可以并发执行。在C/C++中可以通过CreateThread函数在进程中创建线程,函数的具体格式如下:[cpp] view plain copy HAN...转载 2018-03-05 15:10:49 · 3664 阅读 · 0 评论 -
双线性插值运算实现
一、原理双线性插值在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值[1]。见下图:假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。最常见的情况,f就是一个...原创 2019-04-04 15:52:48 · 689 阅读 · 0 评论 -
.h文件和.hpp文件的区别描述
c++中的.hpp文件 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用...转载 2018-09-19 11:28:12 · 1288 阅读 · 0 评论 -
语言标准函数库速查
功能与pow一致,只是输入与输出皆为浮点数 因此请参考 pow....-----------------------------------------------原型:extern float pow(float x, float y); 用法:#include <math.h> 功能:计算x的y次幂。 说明:x应大于零,返回幂指数的结果。 ...转载 2018-08-27 15:53:04 · 286 阅读 · 0 评论 -
窗口视图编程
/*typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);*//*窗口视图讯息处理程序:视窗讯息处理程式确定了在视窗的显示区域中显示些什么以及视窗怎样回应使用者输入。*/LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM...原创 2018-08-20 12:53:26 · 305 阅读 · 0 评论 -
auto_ptr智能指针的用法及其成员函数说明
智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限。本文总结的8个问题足以涵盖auto_ptr的大部分内容。 1. auto_ptr是什么?auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥...转载 2018-08-27 09:10:42 · 1091 阅读 · 0 评论 -
vector类 的属性和用法
vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。 vector的扩充机制:按照容器现在容量...转载 2018-08-22 13:07:30 · 16949 阅读 · 0 评论 -
C++中查找字符或者字符串的一些函数
string类的头文件提供了很多搜索相关的函数比如find()函数及其变体。这使得我们可以以多种不同的方式在字符串中搜索给定的子字符串或字符。但是对于初学者来讲,经常被这些长相类似的函数所混淆。 下面总结了string类的find相关函数:应用例句:int main(int argc, char *argv){ string teststr = "dfdvjfjbjgkbnfbvc...原创 2018-08-16 15:02:48 · 5997 阅读 · 0 评论 -
string::reserve和string::size疑点分析
对于C++的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vector的size()和capacity()方法获得该vector当前的size和capacity值。相应的,vector提供了两个方法来分别对size和capacity进行操作,它们就是resize方法和reserve方法。 首先,对于size和capacity,这是两个比较容易混淆的概念。都...转载 2018-08-16 14:27:01 · 471 阅读 · 0 评论 -
类型兼容性的解决心方法
#include using namespace std;class parent{public: parent(int a) { this->va = a; } virtual void print(void) { cout va<< endl; }private: int va;};class child : public parent{public: c原创 2017-09-08 10:29:04 · 290 阅读 · 0 评论 -
多继承
概念: 一个类有多个直接积累的集成关系称为多继承语法:class 派生类名:访问权限 基类名1,访问权限 基类名2,访问权限 基类名3....实例:#include using namespace std;class Base1{public: Base1(int a1) { this->B_a1 = a1; } void print1() { cout原创 2017-09-07 20:59:46 · 257 阅读 · 0 评论 -
继承中的static关键字
实例:#include using namespace std;class parent{public: void print(void) { cout << "parent a=:"<<a<< endl; }public: static int a;private: int b;protected: int d;};int parent::a = 100;原创 2017-09-07 20:39:25 · 249 阅读 · 0 评论 -
括号操作符重载案例
#include using namespace std;class operatorer{public: /*等号操作符重载*/ int operator()(int m_a, int m_b) { return (m_a*m_a+m_b*m_b); }private: int a; int b;};int main(){ operatorer oop1;原创 2017-09-05 20:30:28 · 450 阅读 · 0 评论 -
C++引用-指针的应用与常引用
1 指针应用struct MY_Struct{ char name[64]; int age; };int QuotePointer(MY_Struct* &swap){ //swap = (MY_Struct*)malloc(sizeof(MY_Struct)); swap = new MY_Struct; if (swap == NULL) cout " << end原创 2017-08-27 19:08:47 · 250 阅读 · 0 评论 -
c++引用
c++的引用与c语言的指针相似;引用的特性:1 引用在定义是必须被初始化;2 引用在被初始化时其初始化数据的类型必须和引用定义的类型相同3 引用是c++特有的属性;4 引用的实质是给变量取一个别名,所以相当于操作变量本身;5 引用类型和指针类型相似,都占四个字节;一 简单引用简单引用的举例:int main(){ int a=10;原创 2017-08-26 21:21:04 · 262 阅读 · 0 评论 -
C++类的封装
private,public,protected的访问范围:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的全局函数,原创 2017-08-27 21:30:53 · 374 阅读 · 0 评论 -
左移操作符重载
当要用到cout左移操作符重载的实例:class operatorcg{ friend ostream& operator<< (ostream& output, operatorcg& oop);private: int a; int b;public: void SetValue(int a, int b) { this->a = a; this->b = b;原创 2017-09-04 21:30:14 · 589 阅读 · 0 评论 -
数组下标重载
可以用类定义数组,其实数组的个数就是对象实例化的个数,如下:#include using namespace std;class Array{public: Array(int length) { this->This_length = length; this->This_array = new int[This_length]; } void SetArray(int原创 2017-09-04 20:58:45 · 573 阅读 · 0 评论 -
一元运算符操作符重载
前置++实例:#include using namespace std;/*单目运算符重载*/class Sigoptor{ friend Sigoptor & operator++(Sigoptor & op);private: int a; int b; public: void operator--() { this->a--; this->b--; }原创 2017-09-04 12:36:20 · 377 阅读 · 0 评论 -
运算符重载
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。简单运算符重载的实力“:class mainclass{public: mainclass(int a, int b) { this->a = a原创 2017-09-03 14:12:30 · 235 阅读 · 0 评论 -
操作符重载案例之字符串重载
本次案例自定义一个字符串类(Mystring),然后重载该字符串类以后,就可以向使用string类一样使用Mystring类了;Mystring.h文件:#ifndef __MYSTRING_H#define __MYSTRING_Hclass Mystring{ friend void print(Mystring & oop);public: /*空串 “”*/ Myst原创 2017-09-05 21:20:49 · 470 阅读 · 0 评论 -
基本运算符重载实例
Mystring.h#include #ifndef __MYSTRING_H#define __MYSTRING_Hclass Mystring{ friend void print(Mystring & oop); public: /*空串 “”*/ Mystring(); Mystring(char *str); Mystring(Mystring &oop);原创 2017-09-06 14:27:19 · 287 阅读 · 0 评论 -
C++基类与派生类中同名成员的调用
实例:#include using namespace std;class parent{public: void print(void) { cout << "parent a=:"<<a<< endl; }public: int a;private: int b;protected: int d;};class child3 : public parent原创 2017-09-07 20:10:50 · 2818 阅读 · 0 评论 -
C++的继承中构造和析构函数的调用顺序
实例:#include using namespace std;class parent{public: parent(int a, int b, int d) { this->a = a; this->b = b; this->d = d; cout << "基类构造" << endl; } ~parent() { cout << "基类析构" << en原创 2017-09-07 13:03:01 · 413 阅读 · 0 评论 -
继承中的类型兼容性原则
类型兼容性规则是指在需要积累对象的任何地方,都可以使用共有的派生类的对象来替代。兼容性规则:* 子类对象可以当作父类对象使用* 子类对象可以直接赋值给基类对象* 子类对象可以直接初始化父类对象* 父类指针可以直接指向子类对象* 父类引用可以直接指向子类对象在替代之后,派生类就对象就可以作为基类的对象使用但只能从基类继承成员。原创 2017-09-06 22:00:55 · 504 阅读 · 0 评论 -
protect继承
实例:#include using namespace std;class parent{public: void print(void) { //cout << "a=:" << a << " b=:" << b <<" c=:"<< d << endl; } int a;private: int b;protected: int d;};#if 0原创 2017-09-06 21:22:06 · 637 阅读 · 0 评论 -
private继承
实例:#include using namespace std;class parent{public: void print(void) { //cout << "a=:" << a << " b=:" << b <<" c=:"<< d << endl; } int a;private: int b;protected: int d;};#if 0原创 2017-09-06 21:14:31 · 276 阅读 · 0 评论 -
public继承
实例:#include using namespace std;class parent{public: void print(void) { //cout << "a=:" << a << " b=:" << b <<" c=:"<< d << endl; } int a;private: int b;protected: int d;};class原创 2017-09-06 21:07:04 · 221 阅读 · 0 评论 -
面向对象的编程练习
#include #include "SubOOp.h"using namespace std;/*求立方体的面积,体积*/class cube{private: double Cube_l; double Cube_w; double Cube_h;public: void SetCube(double length = 0.0, double width = 0.0,原创 2017-08-28 18:44:33 · 304 阅读 · 0 评论 -
C++之多文件编程
SubOOp.h这个文件中声明类以及其成员函数和成员变量/*#pragma once*/#ifndef _SUBOOP_H_#define _SUBOOP_H_struct ThisFileClass{private: int Stu_Age; /* void SetAge(int age) { Stu_Age=age; } 这种方式编译器在编译时直接将该函数内联到调用原创 2017-08-28 16:00:50 · 2903 阅读 · 0 评论 -
等号操作符重载
当是涉及到深拷贝是,一种解决方式就是自己写构造函数处理深拷贝,另一种方式就是等号操作符重载等号操作符重载实例:#define _CRT_SECURE_NO_WARNINGS#include using namespace std;/*单目运算符重载*/class eqPtor{ private: char *str; int str_length;public: e原创 2017-09-04 16:55:25 · 2284 阅读 · 0 评论