C++
error0_dameng
我最美
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
运算符重载的正确用法
#include<iostream>using namespace std;class Complex{public: int a; int b; friend ostream& operator<<(ostream &out, Complex c3);public: Complex(int a=0,int b=0) { this...原创 2018-10-11 09:38:36 · 642 阅读 · 0 评论 -
C++ 继承 之 构造析构顺序
#include<iostream>using namespace std;class parent{public: parent(int a,int b) { this->a = a; this->b = b; cout <<"我是爸爸构造函数" << endl; } void printfP() { } ~...原创 2018-08-29 22:03:31 · 693 阅读 · 0 评论 -
C++ 继承之 类型兼容性原则
类型兼容性原则 类型兼容原则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样公有派生类就具备了基类的所有功能。凡是基类能解决的问题。公有派生类都可以解决。类型兼容原则中所指的替代包括以下情况 1)子类对象可以当作父类对象使用 2)子类对象可以直接赋值给父类对象 3)子类对...原创 2018-08-29 21:22:02 · 503 阅读 · 0 评论 -
C++ 静态成员变量和静态成员函数
#include<iostream>using namespace std;class test{public: //静态成员函数 //静态成员函数只能调用静态成员变量 不能调用普通成员变量 //普通变量为每个对象本身所拥有,而静态成员变量为所有对象共同拥有 //如果静态成员函数调用普通变量的话,静态函数不知道自己调用的是哪一个对象的变量 static void ...原创 2018-08-25 18:51:35 · 158 阅读 · 0 评论 -
C++ new和delete
#include<iostream>using namespace std;//1、malloc和free是C语言中的函数// 而new和delete是C++中的操作符//2、malloc和new最根本的区别是,new可以调用构造函数初始化对象// free和delete最大的区别是,delete可以调用析构函数 //3、当申请空间的对象为基础类型和数组...原创 2018-08-25 18:07:28 · 192 阅读 · 0 评论 -
C++ 构造中调用构造——强化训练(三)
#include<iostream>using namespace std;class test{public: test(int a, int b, int c) { m_a = a; m_b = b; m_c = c; cout << "我是构造函数1" << endl; } test(int a, int b) { ...原创 2018-08-25 16:45:02 · 163 阅读 · 0 评论 -
C++ 匿名对象的生命周期——强化训练(二)
#include<iostream>using namespace std;class ABCD{public: ABCD() { } ABCD(int a, int b, int c) { m_a = a; m_b = b; m_c = c; cout << "ABCD类有参构造"; cout << "a=" <...原创 2018-08-25 16:14:39 · 1154 阅读 · 0 评论 -
C++ 构造和析构调用顺序——强化训练(一)
#include<iostream>using namespace std;class ABCD{public: ABCD() { } ABCD(int a, int b, int c) { m_a = a; m_b = b; m_c = c; cout <<"ABCD类有参构造" ; cout <<"a="&l...原创 2018-08-25 15:53:01 · 271 阅读 · 0 评论 -
C++构造函数对象初始化列表
对象初始化列表 1)对象初始化列表出现的原因 必须这样做 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类型员的带参数的构造函数。如果没有初始化列表,那么他将无法完成第一步。#include<iostream>using namespac...原创 2018-08-25 11:45:33 · 370 阅读 · 0 评论 -
C++ 继承之 派生类的访问控制
继承说明 1、子类拥有父类的所有成员变量和成员函数 2、子类就是一种特殊的父类 3、子类对象可以当作父类对象使用 4、子类可以拥有父类没有的方法和属性派生类的访问控制 派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法),但是这些成员的访问属性,在派生过程中是可以调整的 不同继承方式会改变继承成员的访问属性1)...原创 2018-08-29 17:10:31 · 311 阅读 · 0 评论 -
抽象类的基本用法
纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在积累中没有定义,要求任何派生类都定义自己的版本 纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分) 纯虚函数说明形式: virtual 类型 函数名(参数列表)=0 一个纯虚函数的基类成为抽象类; 例如:Shape 为一个抽象类 Shape x;//e...原创 2018-09-01 17:41:17 · 1413 阅读 · 0 评论 -
C++ 抽象类在多继承中的应用
工程中的多继承 被实际开发经验抛弃的多继承;工程开发中真正意义上的多继承是几乎不被使用的;多重继承带来的代码复杂性远多于其带来的便利;多重继承对代码维护性上的影响是灾难性的,在设计方法上,任何多继承都可以单继承代替;多继承的应用场景 绝大多数面向对象语言都不支持多继承;绝大多数面向对象语言都支持接口的概念;但是C++中没有接口的概念;c++中可以使用...原创 2018-09-01 23:25:40 · 842 阅读 · 0 评论 -
模板类派生模板类
#include<iostream>using namespace std;template <typename T>class A{public: T a;public: A(T a = 0) { this->a = a; } void printfA() { cout << "a= "<<a<<..原创 2018-09-25 09:34:16 · 267 阅读 · 0 评论 -
函数模板的机制探究
函数模板的机制 编译器并不是把函数模板处理成能够处理任意类的函数 编译器从函数模板通过具体类型产生不同的函数 编译器会对函数模板进行两次编译 在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译 第一次编译:是对函数的语法,句法,词法进行编译; 第二次编译是对参数替换后的代码进行编...原创 2018-09-18 14:41:18 · 299 阅读 · 0 评论 -
函数指针做函数参数思想剖析
#include<iostream>using namespace std;//定义了一个函数参数类型typedef int(*funcpointer)(int a, int b);int add(int a, int b){ cout << "a+b="<<a+b<< endl; return a + b;}int...原创 2018-09-02 19:39:46 · 203 阅读 · 0 评论 -
数组指针基础知识
#include<iostream>using namespace std;//数组类型基本语法知识梳理//定义一个数组类型//int a[10];//定义一个指针数组类型//定义一个指向 数组类型的指针 数组类的指针void main(){ int a[10];//a成为数组元素的首地址 &a 代表取整个数组的地址 a+1的步长为4 &a+...原创 2018-09-02 16:47:01 · 185 阅读 · 0 评论 -
C++ 虚继承
一、造成二义性的情况和虚继承的解决方案#include <iostream>using namespace std;class B{public: int b;};class B1: virtual public B{public: int b1;};class B2: virtual public B{public: int b2;};cl...原创 2018-08-30 15:35:44 · 207 阅读 · 0 评论 -
C++ 多继承
多继承概念: 一个类有多个直接基类的继承关系成为多继承 多继承声明语法: class 派生类名:访问控制 基类名0,访问控制 基类名1....... { 数据成员和成员函数声明 }多继承的派生类构造和访问 多个基类的派生类构造函数可以用初始时调用基类构造函数初始化数据成员 执行顺序与单继承构造函数情况类似,...原创 2018-08-30 14:36:47 · 196 阅读 · 0 评论 -
C++ 继承中同名成员变量和同名成员函数
基类成员的作用域延伸到所有派生类 派生类的重名成员屏蔽基类的同名成员#include<iostream>using namespace std;class A{public: A(int a = 0, int b = 0) { this->a = a; this->b = b; cout << "我是爸爸构造"<<...原创 2018-08-30 12:40:34 · 1681 阅读 · 0 评论 -
C++ 继承和组合混搭下的构造与析构
#include<iostream>using namespace std;class object{public: object(int a=0, int b=0) { this->a = a; this->b = b; cout << "我是祖宗构造函数"<<a<<b<< endl; }原创 2018-08-30 11:22:43 · 234 阅读 · 0 评论 -
C++浅拷贝与深拷贝
浅拷贝: 两个辅助变量指向同一内存空间,有一个对象obj2把指向的同一内存空间析构掉,而obj1会再一次析构这一内存空间,在这个时候就会发生错误,obj1会指向一个垃圾值,会出现野指针的现象; 解决此问题的方案为深拷贝 浅拷贝#include<iostream>using namespace std;class test{public:...原创 2018-08-24 18:54:47 · 157 阅读 · 0 评论 -
C++ vptr指针的分步初始化
对象中的vptr指针什么时候被初始化对象在创建时,由编译器对vptr指针进行初始化只有在对象的构造完全结束时,vptr指针的指向才最终确定父类的vptr指针指向父类的虚函数表子类的vptr指针指向子类的虚函数表#include<iostream>using namespace std;class parent{public: parent() {...原创 2018-08-31 15:57:11 · 524 阅读 · 0 评论 -
C++ 多态的使用条件
实现多态的三个条件 1、要有继承 2、要有虚函数重写 3、用父类指针(父类引用)指向子类对象#include<iostream>using namespace std;//herofignter advherofighter enemyfighterclass herofignter{public: int v...原创 2018-08-30 17:44:41 · 828 阅读 · 0 评论 -
虚继承--一种调用,实现多种表现形态
#include<iostream>using namespace std;class A{public: A(int a=0) { this->a = a; cout << "我是爸爸构造"<< endl; } void virtual printf() { cout << "我是爸爸 a="<&原创 2018-08-30 16:56:08 · 205 阅读 · 0 评论 -
C++运算符重载的两种方法
#include<iostream>using namespace std;class Complex{public: Complex(int a=0, int b=0) { this->a = a; this->b = b; } //成员函数 实现“-”的重载 Complex& operator-(Complex &c) {...原创 2018-08-27 16:03:44 · 1132 阅读 · 0 评论 -
C++ 重载运算符基础
运算符重载的本质是 函数的调用 重载运算符函数可以对运算符做出新的解释,但原有基本语意不变 1、不改变运算符的优先级 2、不改变运算符的结合性 3、不改变运算符所需要的操作数 4、不能创建新的运算符 运算符重载的两种方法 用成员或友元函数重载运算符 1、运算符可以重在为成员函数或友元函数 ...原创 2018-08-27 15:24:49 · 246 阅读 · 0 评论 -
C++构造函数的分类
构造函数的分类: 无参构造函数 有参构造函数 赋值构造函数(拷贝构造函数)#include<iostream>using namespace std;class test{public: test() { m_a = 10; ...原创 2018-08-22 17:36:32 · 1607 阅读 · 0 评论 -
C++对象的构造与析构
创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。注意,类的数据成员不能在声明类时初始化。 为了解决这个问题,C++编译器提供了构造函数,来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要其他用户来调用它,而是在建立对象时自动执行。 构造函数和析构函数有关概念: 构造函数 1、构造函数定义及调用...原创 2018-08-22 17:34:00 · 344 阅读 · 0 评论 -
C++友元函数 友元类
//友元类#include<iostream>using namespace std;class A{public: friend class B;private: int a;};class B{public: void setB(int a) { Aobject.a = a; } void printfB() { cout <&...原创 2018-08-26 23:30:11 · 199 阅读 · 0 评论 -
C++类的设计与实现(对象数组)
//array,h#pragma once#include<iostream>using namespace std;class Array{public: Array(int length); Array(const Array& obj); ~Array();public: void setdata(int index, int data); ...原创 2018-08-26 16:55:05 · 724 阅读 · 0 评论 -
C++ 全局函数与成员函数(返回元素 引用 *this)
#include<iostream>using namespace std;class test{public: int a; int b;public: test(int a = 0, int b = 0) { this->a = a; this->b = b; cout << "a=" << a <<...原创 2018-08-26 15:50:12 · 1118 阅读 · 0 评论 -
C++类的封装和访问控制
类的封装、 1)封装是main想对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类和对象实现的 封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息的隐藏 备注:有两层含义(把属性和方法进行封装 对属性和方法进行访问控制) 2)类成员的访问控制 ...原创 2018-08-20 16:48:07 · 261 阅读 · 0 评论 -
C++ 一元运算符的重载(前置++ --,后置 ++ --)
#include<iostream>using namespace std;class Complex{public: friend Complex& operator++(Complex &tmp); friend Complex operator++(Complex &tmp, int); Complex(int a=0, int b=0)...原创 2018-08-27 17:23:54 · 875 阅读 · 0 评论 -
C++拷贝构造函数的调用场景
拷贝函数的四种调用时机 1、2:用一个对象去初始化另一个对象#include<iostream>using namespace std;class test{public: test() { m_a = 10; } test(int a,...原创 2018-08-23 15:32:48 · 410 阅读 · 0 评论 -
判点是否在圆内(C++)
#include<iostream>using namespace std;class Point{private: int m_x; int m_y;public: void Set(int x, int y) { m_x = x; m_y = y; } int getx() { return m_x; } int gety() { ...原创 2018-08-21 14:24:35 · 1273 阅读 · 0 评论 -
C++ 多态的实现原理
多态的实现原理 当类中声明虚函数时,编译器会在类中实现一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表是由编译器自动生成和维护的的 virtual成员函数会被编译器放入虚函数表中 存在虚函数时,每个对象都有一个指向虚函数表的指针(vptr)#include<iostream>using namespace st...原创 2018-08-31 14:39:31 · 176 阅读 · 0 评论 -
C++ 重载重写重定义
函数重载: 必须在同一个类中进行 子类无法重载父类的函数,父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用函数重写; 必须发生于父类和子类之间 并且父类和子类中的函数必须有完全相同的原型 使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义) 多态是在运行期间根据具体对象...原创 2018-08-31 13:40:12 · 258 阅读 · 0 评论 -
C++ 虚析构函数
#include<iostream>using namespace std;class A{public: A() { p = new char[20]; strcpy(p, "obja"); cout << "A()"<< endl; } //如果不用virtual的话,子类申请的内存 无法释放 会造成内存泄露 virtual...原创 2018-08-31 11:29:57 · 222 阅读 · 0 评论 -
C++ ()运算符的重载
#include<iostream>using namespace std;class test{public: double operator()(double a, double b) { return a + b; }private:};int main(){ test f; cout << f(1, 2); system("pau...原创 2018-08-28 16:56:03 · 159 阅读 · 0 评论 -
C++ =、[ ]、==、!=的重载
//Array.h#pragma once#include<iostream>using namespace std;class Array{public: Array(int length); Array(const Array& obj); ~Array();public: void setdata(int index, int data); ...原创 2018-08-28 16:35:24 · 29487 阅读 · 2 评论
分享