c++
c++
clooth
这个作者很懒,什么都没留下…
展开
-
函数指针做函数参数的思想构析
#include #include <string.h>#include <stdlib.h>using namespace std;int add(int a, int b)//子任务的实现者{printf(“func add() do…”);return a + b;}int add2(int a, int b)//子任务的实现者{printf(“func add2() do…”);return a + b;}int add3(int a, int b原创 2020-08-11 02:28:13 · 124 阅读 · 0 评论 -
函数指针语法梳理
#include #include <string.h>#include <stdlib.h>using namespace std;//函数指针语法梳理//1、如何定义一个函数类型//2、如何定义一个函数指针类型//3、如何定义一个函数指针(指向一个函数的入口地址)int add(int a, int b){printf(“func add…\n”);return a + b;}void main(){add(1, 2);//直接调用//函数名就是函数原创 2020-08-11 01:22:27 · 178 阅读 · 0 评论 -
数组指针语法梳理
#include #include <string.h>#include <stdlib.h>using namespace std;//数组类型基本语法知识梳理void main(){int a[10];//a代表的是数组首元素的地址,&a代表的是整个数组的地址 a+1步长是4 &a+1步长是40//定义一个数组类型typedef int(MyArray)[10];MyArray testarray;testarray[0] = 10原创 2020-08-11 00:41:36 · 272 阅读 · 0 评论 -
面向抽象类编程案例——计算程序员工资
#include using namespace std;class programmer{public:virtual void getSal() = 0;};class junior_programmer :public programmer{public:junior_programmer(char* name, char* job, int sal){this->name = name;this->job = job;this->sal = sal;}原创 2020-07-14 22:47:05 · 415 阅读 · 0 评论 -
抽象类在多继承中的应用
抽象类在多继承中的应用的案例:#include using namespace std;class interface1{public:virtual int add(int a, int b)=0;virtual void print() = 0;};class interface2{public:virtual int mcl(int a, int b) = 0;virtual void print() = 0;};class Parent{public:int g.原创 2020-07-14 20:47:39 · 286 阅读 · 0 评论 -
纯虚函数
纯虚函数做接口的案例:#include using namespace std;class Area{public:virtual void calculate() = 0;};class Circle:public Area{public:Circle(int a, int b){this->a = a;this->b = b;}virtual void calculate(){cout << “圆的面积是” << 3.14 * a .原创 2020-07-14 19:41:00 · 556 阅读 · 0 评论 -
父类指针和子类指针的步长
结论:多态是用父类指针指向子类对象 和 父类指针++ 是两个不同的概念案例:#include using namespace std;class Parent{public:Parent(int a=0){this->a = a;}virtual void print(){cout << “这是父类” << endl;}private:int a;};class Child:public Parent{public:Child(in原创 2020-07-14 17:37:32 · 139 阅读 · 0 评论 -
面试题:谈谈对多态的理解
原创 2020-07-13 13:07:23 · 580 阅读 · 0 评论 -
子类的vptr指针是分步初始化的
原创 2020-07-13 04:54:11 · 132 阅读 · 0 评论 -
多态的实现原理
原创 2020-07-13 04:34:01 · 139 阅读 · 0 评论 -
重载、重写、重定义、名称覆盖
1、子类和父类中的函数名相同,函数参数相同,没有virtual关键字,重定义2、子类和父类中的函数名相同,函数参数相同,有virtual关键字, 重写3、子类和父类中的函数名相同,函数参数不同,名称覆盖,不会发生重载4、在同一个作用域内,函数名相同,函数参数不同(返回值类型不影响),称为重载...原创 2020-07-12 18:29:00 · 120 阅读 · 0 评论 -
虚析构函数
目的:通过基类对象的指针,来调用所有派生类的析构函数实现方法:在基类析构函数前加上virtual原创 2020-07-12 16:56:01 · 166 阅读 · 0 评论 -
多态成立的三个条件
原创 2020-07-11 20:30:16 · 351 阅读 · 0 评论 -
二义性和虚继承
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性(这就是虚继承virtual的唯一应用场景)#include using namespace std;class A{public:int a;void print(){cout << “a:” << a << endl;}};class B1:virtual public A{};class B2:virtual public A原创 2020-07-08 16:22:00 · 150 阅读 · 0 评论 -
c++多继承语法
原创 2020-07-08 15:44:37 · 105 阅读 · 0 评论 -
c++继承的static关键字
1、拥有static关键字的变量遵守派生类的访问控制规则2、父类中的static修饰的成员变量,在子类继承之前必须进行初始化,否则子类继承会报错;#includeusing namespace std;class A{public:A(){cout<<“A的构造函数”<<endl;}public:static int a;int b;public:void get(){cout<<"A的b: "<<b<<endl;原创 2020-07-08 14:52:15 · 260 阅读 · 0 评论 -
继承中的同名成员变量和同名成员函数
一句话:派生类的同名成员屏蔽基类同名成员,转而调用自身成员。 若想调用基类同名成员,需要加上域操作符(::) 举例:class Parent { public: int a; void printP() { cout<<"a"<<a<<endl; } }; class Child:public Parent { public: int a;原创 2020-07-07 18:50:22 · 651 阅读 · 0 评论 -
继承中的构造与析构
结论:先调用父类构造函数,再调用组合对象的构造函数,在调用子类构造函数。析构顺序和构造相反。原创 2020-07-07 17:49:23 · 1029 阅读 · 0 评论 -
类型兼容性原则
原创 2020-07-07 15:08:11 · 332 阅读 · 0 评论 -
c++继承:判断一句话是否能被访问
三看原则:1、看调用语句(这句话写在子类的内部还是外部)2、看子类如何从父类继承(public、private、protected)3、看父类中的访问级别(public、private、protected)注意:父类中的私有对象(private),无论以何种方法(public、private、protected)被子类继承,子类都不可调用...原创 2020-07-07 13:44:10 · 71 阅读 · 0 评论 -
c++继承的语法与重要说明
语法:class 派生类名:继承方式 基类名 { 成员声明; }说明:1、子类拥有父类的所有成员变量和成员函数(除了构造和析构函数)2、子类就是一种特殊的父类3、子类对象可以当作父类对象使用4、子类可以拥有父类没有的方法和属性...原创 2020-07-06 21:31:29 · 136 阅读 · 0 评论 -
将类中的private变量露出来
变成public的函数即可例:class A//定义一个类{private:int b;public:int m_b(){return b;}}//调用void main(){int c=A.m_b();//想要实现c=b}原创 2020-07-04 09:46:40 · 172 阅读 · 0 评论 -
重载等号操作符
结论:先释放旧的内存,在返回一个引用Name &operator=(Name &obj1){//先释放旧的内存if(m_p!=NULL){delete []m_p;m_len=0;}//根据obj1分配内存大小this.m_len=obj1.m_len;this.m_p=new char[m_len+1];//把obj1赋值strcpy(m_p,obj1.m_p);return *this;}...原创 2020-07-02 04:50:07 · 159 阅读 · 0 评论 -
友元函数实现左移右移操作符重载
注意:输入输出操作符的重载只能依靠友元函数(而不能用成员函数)ostream& operate<<(ostream &out,Complex &c1)//函数返回值当左值需要返回一个引用 {out<<“12345,生活真是苦”<<endl;return out;}...原创 2020-07-01 10:43:36 · 147 阅读 · 0 评论 -
全局函数和成员函数完成一元操作符重载
一、全局函数重载++(前置)Complex & operator++(Complex &c1){c1.a++;//由于用到了类中的私有成员,该函数需要成为类的友元函数c1.b++;return c1;}二、成员函数重载++(前置)Complex & operator++(){this->a++;this->b++;return *this;}三、全局函数重载++(后置)Complex operator++(Complex &c1,in原创 2020-07-01 09:50:16 · 195 阅读 · 0 评论 -
c++运算符重载
一、设计原因:让自定义数据类型有机会进行运算符操作二、本质:运算符重载的本质是函数调用三、重载方法:例1、通过全局函数方法完成+操作符重载Complex operator+(Complex &c1,Complex &c2)//函数声明{…}int main()//函数调用分析{Complex c1(1,2),c2(3,4);Complex c3=c1+c2;//相当于调用函数Complex c3=operator(c1,c2);}例2、通过类成员函数方法完成-操原创 2020-07-01 02:45:33 · 154 阅读 · 0 评论 -
友元类
原创 2020-06-30 22:11:33 · 95 阅读 · 0 评论 -
友元函数
一般来说,类的私有成员(private)不能在类外被调用。但可以通过使用友元函数破坏这个规则。格式:class A{public:friend void FriendFun(A* pa,int b);//说明语句位置与访问描述无关 (可 以在private或public下,都一样)private:int a;} //调用 void FriendFun(A* pa,int b) { pa->a=b;//若不是友元函数,则此行程序会报错 }...原创 2020-06-30 21:02:02 · 567 阅读 · 0 评论 -
函数返回引用
函数返回引用(返回一个引用相当于返回自身)Test &a(…){…return *this;//*操作让this指针回到元素状态}原创 2020-06-29 01:43:56 · 144 阅读 · 0 评论 -
全局函数和成员函数之间的转化
1、把全局函数转化成成员函数,通过this指针隐藏左操作数如:全局函数Test Add(Test &t1,Test &t2)它的成员函数形式Test Add(Test &t2)成员函数的应用Test K=t1.Add(t2)2、把成员函数转化为全局函数,多了一个参数如:成员函数void PrintAB(){cout<<this.a<<endl;}它的全局函数形式void PrintAB(Test *pthis){cout<a<原创 2020-06-29 01:37:05 · 235 阅读 · 0 评论 -
const修饰的是this指针
例如:class ABC{private:int a;int b;public:void abc(int a,int b) const{…//此时因为const的存在,不能修改this->a和this->b}}原创 2020-06-29 00:25:49 · 187 阅读 · 0 评论 -
静态成员变量和静态成员函数
static int a;//声明与定义类的静态数据成员如:定义了一个类A并且定义了一个静态成员q,并定义了A aa、A bb,则在aa、bb中的q都是一个q。静态成员变量和函数的调用方法:class BB{public:static void Getc(){cout<<“c:”<<c<<endl;}…private:int a;int b;static int c;}int BB::c=10;//调用静态变量BB::Getc();//调原创 2020-06-25 02:30:33 · 147 阅读 · 0 评论 -
new和delete的基本语法
new和delete是c++的语法,很像c语言中的malloc和freenew可以分配:基础类型变量、数组变量、类对象一、分配基础类型c语言中:int *p=(int *)malloc(sizeof(int));*p=10;free§;c++中:int *p=new int;//也可以int *p=new int(20);*p=20;delete p;二、分配数组变量c语言中:int *p=(int *)malloc(sizeof(int)*10);//int array[10]原创 2020-06-25 02:31:05 · 156 阅读 · 0 评论 -
构造中调用构造
构造中调用构造是极其危险的,因为构造中的构造是匿名函数(如果没被扶正会原地析构)原创 2020-06-25 02:31:24 · 140 阅读 · 0 评论 -
构造函数的初始化列表
构造函数的初始化列表解决:在B类中组合了一个A类对象(A类设计了构造函数)新的语法:constructor:constructor():m1(v1),m2(v1,v2),m3(v3)如:class B{public:B(int _b1,int _b2):a1(1),a2(2),c(0){…}private:int b1;int b2;A a1;A a2;const int c;//注意:如果类的属性里有const属性,则必须要和别的类的对象一起初始化(初始化列表给const属原创 2020-06-25 02:31:42 · 100 阅读 · 0 评论 -
浅拷贝问题
解决浅拷贝的方法一、手工的编写拷贝构造函数,使用深拷贝class Name{public:Name(const char* myp){m_len=strlen(myp);p=(char*)malloc(m_len+1);strcpy(m_p,myp);}//Name obj2=obj1;//手工构造的拷贝构造函数Name(const Name& obj1){m_len=obj1.m_len;m_p=(char*)malloc(m_len+1);strcpy(m_p,原创 2020-06-25 02:31:59 · 137 阅读 · 0 评论 -
构造函数的调用规则研究
在定义类时,只要你写了构造函数,则必须要用原创 2020-06-25 02:32:22 · 73 阅读 · 0 评论 -
构造函数的分类
构造函数的分类:无参数构造函数、有参数构造函数、赋值构造函数(copy构造函数)、默认构造函数class Test(){Test()//无参数构造函数{…}Test(int a,int b)//有参数构造函数{…}Test(const Test& obj )//赋值构造函数(作用:用一个对象去初始化另一个对象){...}}调用的方法:一、无参数的构造函数Test t1;二、有参数的构造函数1、括号法:Test t1(1,2);2、等号法:Test t1=(原创 2020-06-25 02:32:37 · 2443 阅读 · 0 评论 -
类的构造和析构基础
构造函数:在类中与类名同名的函数,没有返回类型,可以有参数,在对象初始化时被调用如:class Test{Test(){}}析构函数:在类中与构造函数名同名的函数,没有返回类型,也没有参数,在对象被销毁时调用如:class Test{Test()//构造函数{}~Test()//析构函数{}}//注意:先创建的对象后释放!...原创 2020-06-25 02:32:48 · 89 阅读 · 0 评论 -
类的声明和类的实现分开
#pragma once//只包含一次//类的申明在.h(头文件)中 如:MyTeacher.h//类的实现在同名.cpp中 如:MyTeacher.cpp//类的使用在main.cpp中 如:mainclass.cpp原创 2020-06-25 02:33:15 · 310 阅读 · 0 评论