![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
MortVing
这个作者很懒,什么都没留下…
展开
-
构造函数作业
建立一个类SUM,求二维数组外围各元素的和,并且输出数组各元素及所求之和。具体要求如下:(1)私有数据成员int a[4][4]:二维数组,存放要处理的数据。int s:存放数组a外围各元素的和。(2)公有成员函数SUM(int b[4][4]):构造函数,用数组b初始化数组a。void process():求二维数组外围各元素的和s。void print():按行列方式输出数组a的...原创 2018-07-23 14:22:22 · 282 阅读 · 0 评论 -
虚指针,虚函数,虚函数表,纯虚函数
虚指针(虚继承)在使用多重继承时,如存在class A ,有m_a变量;class A1 : virtual public A, m_a1;class A2 : virtual public A ,m_a2;class B : public A1,public A2 ,m_b 时;存在以下内存存储顺序:| 虚指针(指向m_a)| m_a1 | 虚指针(指向m_a) |...原创 2018-08-29 17:23:39 · 520 阅读 · 0 评论 -
函数对象和函数的使用
函数对象,类里定义了操作符重载的函数,在算法里参数调用时需加括号()。若直接定义一个全局函数,在算法里参数调用直接调用函数名即可。#include<iostream>#include<vector>using namespace std;class print{ public: bool operator ()(const int &i) ...原创 2018-08-08 14:45:22 · 476 阅读 · 0 评论 -
函数形参,不同数据类型的值传递,const修饰成员函数
1. void test(){}2. void test(void){}3. void test(void *){}1和2是相同的,表示test函数不接受任何参数,无论在c还是c++中如果函数不接受参数用2的方式书写是一种良好的习惯3表示test函数接受一个指针类型的参数,无论是什么指针,只要是指针就可以传入 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“co...转载 2018-08-15 15:25:57 · 541 阅读 · 0 评论 -
设计模式
1. Factory method我们把简单工厂方法归类到工厂方法中。工厂方法的目的是用来解决具有同一接口(基类)派生类对象的生成问题。尽管可以通过类的构造函数生成对象,但是,如果派生类的数量很大——即使几十个不同的派生类——对于程序设计而言也是困难的。这里有两个困难:其一是可读性,在一个程序里使用一个switch-case block判断具体的生成类型,程序几乎不能读,也增加了编码的难度;其...转载 2018-08-12 22:40:37 · 84 阅读 · 0 评论 -
STL系列之五 priority_queue 优先级队列
priority_queue 优先级队列是一个拥有权值概念的单向队列queue,在这个队列中,所有元素是按优先级排列的(也可以认为queue是个按进入队列的先后做为优先级的优先级队列——先进入队列的元素优先权要高于后进入队列的元素)。在计算机操作系统中,优先级队列的使用是相当频繁的,进线程调度都会用到。在STL的具体实现中,priority_queue也是以别的容器作为底部结构,再根据堆的处理规则...转载 2018-08-06 22:29:10 · 154 阅读 · 0 评论 -
类模板下运算符重载的两种用法
1template <typename T>class Complex{ friend ostream &operator <<<T>(ostream &out,const Complex &c);private: T m_a; T m_b;public: Complex(T a,T b); void print(...原创 2018-08-01 19:51:42 · 5127 阅读 · 1 评论 -
计算器(STL:stack)
#include <iostream>#include <stack>using namespace std;int Priority(char ch){ switch(ch) { case '(': return 3; case '*': case '/': return 2; case '+': case '-': ...原创 2018-08-05 21:19:41 · 239 阅读 · 0 评论 -
通过父类指针释放子类资源
#include <iostream>using namespace std;class A //基类{protected: int m_len;public: A(int l); virtual ~A(); //虚析构函数};A::A(int l){ cout << "AAAAAAAAAAAAAAAAA" <&...原创 2018-07-31 15:40:07 · 1238 阅读 · 0 评论 -
C++ 把引用作为返回值
返回的引用是函数里选择的对应变量返回的引用,return vals[i]是数组的某个元素,然后即可进行赋值 setValues(1) = 20.23;记得在定义函数名前加 &用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。#include <iostream> using namespace std; double vals[] =...转载 2018-08-04 10:03:43 · 719 阅读 · 0 评论 -
Virtual的两个用法
1.virtual用在继承的时候 虚继承#include <iostream>using namespace std;class A{ public: int m_a; A(); virtual void print();};A::A(){ print();}void A::print(){ cout<<"this is A"<&...原创 2018-07-30 21:14:16 · 3395 阅读 · 0 评论 -
抛出异常类
throw 抛出异常 可抛出各种类型try 判断是否有异常区catch 接到则处理收到的异常并处理异常#include<iostream>using namespace std;class Myarray{ private: int m_len; int *m_data; public: int &operator [](int index);...原创 2018-08-03 21:30:13 · 829 阅读 · 0 评论 -
C++的向上转型
#include<iostream>using namespace std;class A{ private: int m_a; public: void print() { cout<<"AA"<<endl; }};class B:public A{ private: int m_b; void print() { ...原创 2018-07-29 09:31:11 · 351 阅读 · 0 评论 -
继承中的对象初始化列表
#include<iostream>using namespace std;class A{ protected: int m_a; public: A(int a);};A::A(int a){ cout<<"AA"<<endl; m_a=a;}class C{ private: int m_c; public: C...原创 2018-07-28 19:05:52 · 1478 阅读 · 1 评论 -
类的运算符重载(string)
Mystring.h#ifndef _MYSTRING_H#define _MYSTRING_H#include<string.h>#include<iostream>using namespace std;class Mystring { friend ostream &operator <<(ostream &out,co...原创 2018-07-27 09:39:23 · 377 阅读 · 0 评论 -
深拷贝之于浅拷贝
由于浅拷贝只是进行简单的复制,包括地址都是原样复制。每个类都有默认拷贝函数,无须定义。当由于每个类调用构造函数在调用析构函数时释放空间,若在在类中数组只是简单复制,在析构时则会析构两次,造成内存泄漏,因此需要深拷贝解决这一问题。深拷贝则自行定义拷贝函数,申请为数组开辟新的空间。形式通常为 Test (const Test &t) ,变量进行复制即可,但数组或对象需要开辟一段新的...原创 2018-07-25 11:28:58 · 101 阅读 · 0 评论 -
new和delete
栈 存放的是变量或函数返回的值,同时调用函数使用栈,由编译器自动释放。堆 则是程序员自行申请的一段空间,C中用malloc,C++中用new去申请需要的内存空间,同时也需要自行释放空间,free()和delete。new,delete使用方法int *p=new int; //申请int大小的空间并返回地址给pint *p=new int(100) //申请int大小空间赋值10...原创 2018-07-24 21:24:53 · 111 阅读 · 0 评论 -
函数重载和重写
重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。函数重载发生在同一作用域内,即在同一个类里有多个同名函数,参数列表不同。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。即发生在父类子类中,子类重写父类的同名函数。重写需要注意:1 被重写...转载 2018-09-11 19:31:12 · 847 阅读 · 0 评论