
C++ 的那点事
阿凡提程序开发那些事
2009年毕业于XX大学6年的从事技术研发工作,目前在一个国内著名企业从事嵌入式技术开发,对互联网行业很软件行业有深刻的认识
展开
-
嵌套类
#include using namespace std;class rectangle{ public:class point{public:void setx(int X){x=X;}void sety(int Y){y=Y;}int getx()const{return x;}int gety()const{return y;}private原创 2013-12-04 09:55:59 · 625 阅读 · 0 评论 -
在派生类中增加函数
#includeusing namespace std;class father{ public: virtual void smart(){cout //父类的smart()函数};class son:public father{ public: virtual void beautiful(){cout //子类的beautiful函数原创 2013-11-27 14:25:09 · 693 阅读 · 0 评论 -
虚函数的系统调用
每个对象创建虚函数时,对象都得记录这个虚函数 ,因此编译器简历 了一个叫做T表的虚函数表,每个对象都有一个指向该表的指针,叫做虚表指针,该指针用来指向虚函数表。相反虚函数表也有一个指针指向该对象,当创建派生类对象的基类部分时,该对象的指针就自动初始化为指向虚函数表的正确部分。当调用派生类对象的构造函数时,这个对象就会添加到虚函数表中去,并且将指针指向该对象的重载函数。当使用指向基类的指原创 2013-11-27 10:35:54 · 383 阅读 · 0 评论 -
三种调用虚函数的方式比较
#include using namespace std;class father{ public: virtual void run()const{cout};class son:public father{ public: void run()const{cout};class daughter:public father{原创 2013-11-27 09:45:40 · 563 阅读 · 0 评论 -
多继承
#include "iostream"using namespace std;class father{public: void smart(){cout //父类的smart()函数 virtual void beautiful(){} //该虚函数只是给son类做个接口,没有什么实际功能 virtual ~father(){cout原创 2013-11-27 14:06:53 · 569 阅读 · 0 评论 -
虚构造函数和析构函数
#include "iostream"using namespace std;class A{ public: A(){cout virtual void func(){cout virtual ~A(){cout};class B:public A{ public: B(){cout void func(){cout ~B(原创 2013-11-27 11:00:43 · 605 阅读 · 0 评论 -
在虚函数中使用成员名限定可以强行解除动态联编
#include "iostream"using namespace std;class A{ public: virtual int get(){return 0;}};class B:public A{ public: int get(){return 1;}};void main(){ B b; A*p=&b;原创 2013-11-27 10:37:18 · 603 阅读 · 0 评论 -
动态联编的应用
#includeusing namespace std;class A{ public: virtual int get(){return 1;}};class B:public A{ public: int get(){return 2;}};void main(){ while (1) { cou原创 2013-11-27 09:28:20 · 590 阅读 · 0 评论 -
运行时静态联编
//在运行时的静态联编的例程如下:#includeusing namespace std;class A{ public: int get(){return 1;}};class B:public A{ public: int get(){return 2;}};void main(){ while (1) {原创 2013-11-27 09:15:13 · 442 阅读 · 0 评论 -
编译时的静态联编
#includeusing namespace std;class A{ public: int get(){return 1;}};class B:public A{ public: int get(){return 2;}};void main(){ A a; int one=a.get(); cout原创 2013-11-26 16:15:29 · 471 阅读 · 0 评论 -
静态联编和动态联编
联编是指一个计算机程序自身彼此关联(使一个源程序经过编译、连接,成为一个可执行程序)的过程,在这个联编过程中,需要确定程序中的操作调用(函数调用)与执行该操作(函数)的代码段之间的映射关系,按照联编所进行的阶段不同,可分为静态联编和动态联编。静态联编:调用函数和被调函数在程序编译时,他们在内存中的地址和映射关系已经确定好,动态联编:内存和地址映射关系不确定,加virtual 为动态联编,自原创 2013-11-26 16:07:54 · 432 阅读 · 0 评论 -
多继承
#include using std::cout;using std::cin;using std::endl;class father{ public: father(){cout virtual ~father(){cout virtual void smart()const{cout};class mother{ public:原创 2013-11-27 14:27:21 · 475 阅读 · 0 评论 -
模拟抽象类
抽象类为最高基类#include using namespace std;class shape{ public: shape(){} virtual ~shape(){} virtual float length(){return 0;} virtual float area(){return 0;} virtual void show(){}原创 2013-11-27 14:41:37 · 586 阅读 · 0 评论 -
纯虚函数与抽象类
由于任何一个从抽象类派生的新类都会继承纯虚函数的特征--无任何功能因此要创建这个新类的对象必须为每一个纯虚函数赋予功能#include using namespace std;class shape{ public: virtual double area()=0;};class A:public shape{ protected: doub原创 2013-11-27 16:22:51 · 457 阅读 · 0 评论 -
友元类
=======================什么是友元类======================= 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。=======================友元类能做什么======================= 友元类可以通过自转载 2013-12-04 09:55:13 · 541 阅读 · 0 评论 -
类成员函数指针
#include using namespace std;class human //抽象类human{ public: virtual void run()=0; //纯虚函数run virtual void eat()=0; //纯虚函数eat};class mother:public human //派生类mother从抽象类human继承{原创 2013-12-02 19:46:03 · 576 阅读 · 0 评论 -
函数指针作为函数参数
#include using namespace std;void square(int &x,int &y){ x=x*x; y=y*y;}void cube(int &x,int &y){ x=x*x*x; y=y*y*y;}void Swap(int &x,int &y){ int z; z=x; x原创 2013-12-02 19:14:12 · 622 阅读 · 0 评论 -
函数指针
数组名就是指向数组第一个元素的常量指针函数名也是指向函数第一条指令的常量指针正常情况下,程序在编译后,每个函数都有一个首地址,也就是函数第一条指令的地址我们用一个指针来保存这个地址,这个指针就是函数指针,该指针可看做是函数名,因此我们可以通过该指针调用函数原创 2013-11-29 16:27:27 · 646 阅读 · 0 评论 -
私有静态成员变量
#include using namespace std;class A {public:void func(){cout//定义公有成员函数func(),用该函数访问私有静态成员变量xprivate:static int x; //将静态成员变量x声明为私有};int A::x=1000; //定义并初始化静态成员变量int原创 2013-11-29 10:44:53 · 1162 阅读 · 0 评论 -
静态成员变量
1.静态成员变量是属于整个类的全局变量,它不单属于某个对象,普通成员变量是属于类中对象的变量。它不能被所有对象共享2.静态成员变量必须在全局进行定义,而成员变量由于是属于该类某个对象的,而不是属于整个类的,因此不用在全局进行定义。3.在使用静态成员变量时,可以不限定为某个具体的对象,只与类名连用即可如 A::total 而不用 A a; a.total;4.静态成员在没有对原创 2013-11-29 10:36:42 · 1001 阅读 · 0 评论 -
静态成员的使用
#include using namespace std;class aspl //将阿司匹林声明为一个aspl类,那么每箱阿司匹林就是该类的一个对象 { public: aspl(float p){price=p;TotalPrice=p+TotalPrice;} //在构造函数中实例化该对象的私有成员变量price,这样就得到了一箱阿原创 2013-11-29 14:18:25 · 825 阅读 · 0 评论 -
静态成员函数
/*#include using namespace std;class A{ public: void static show(){cout//定义静态成员函数show,输出私有静态成员变量n并将n自加 private: static int n; //声明私有静态成员变量n};int A::n=0; //定义私有静态成员变量nin原创 2013-11-29 10:53:48 · 907 阅读 · 0 评论 -
慎用多继承
在单一继承可以实现的情况下,不要使用多继承原创 2013-11-28 20:20:29 · 489 阅读 · 0 评论 -
复杂的抽象类
#include using namespace std;class animal{ public: animal(int); virtual ~animal(){cout virtual int getage() {return itsage;} virtual void sleep()=0; //声明6个纯虚函数 virtual void eat原创 2013-11-28 20:17:01 · 528 阅读 · 0 评论 -
虚函数在动态联编中的应用
#include using namespace std; class poser{ public: virtual void beat()const{cout protected: int age;};class Ali:public poser{ public: void beat()const{cout};class Le原创 2013-11-26 15:55:11 · 461 阅读 · 0 评论 -
虚函数
#include using namespace std; class father{ public: father():age(54){cout ~father(){cout void jump()const {cout virtual void run()const{cout protected: int age;};class原创 2013-11-22 18:02:19 · 554 阅读 · 0 评论 -
指向对象的指针
在堆中创建的对象都是匿名的,因此创建的时候必须用类名来创建,而且要访问它们必须用指针,对的概念在数组里还有详细的讲解father*pfather = new son;解释:该段语句是在堆上创建一个新的son对象,并且返回指向该对象的指针,而赋值操作符=又将该指针赋值给指向father的指针。这样的好处是son对象可以直接访问father的数据和函数原创 2013-11-21 16:27:06 · 655 阅读 · 0 评论 -
调用构造函数进行类型转换
#include using namespace std;class A {public: A(int x){i=x;cout ~A(){coutvoid get(){coutprivate: int i;};int main(){ A a(99); //调用A(int x)输出"构造函数执行!99" a原创 2013-11-19 16:13:36 · 671 阅读 · 0 评论 -
再谈构造函数
#include using namespace std;class A {public:A(){}A(int i){x=i;}private:int x;};int main(){ A a; A b(3); return 0;}原创 2013-11-19 15:50:09 · 605 阅读 · 0 评论 -
阿凡提和他的小毛驴(2)
现在的我无比的渴望创业,做好了一切准备6月份从广州回到河南,带着对未来美好的憧憬,做好干一番事业的准备,下定决心。世事难料,一个多年的好朋友出卖了我 ,在公司发展最迅速的时候,抛弃了我,经历这一切,我深深的体会到交友的重要性我还是涉世不深。在河南还是有不少人脉关系,凭借这点,我又得到一次创业的机会,经一个朋友介绍目前也是在等待这个朋友的一个朋友回到河南,商讨关于这件事初步估原创 2013-11-19 15:45:09 · 1084 阅读 · 0 评论 -
运算符重载
//创建num类:#include using namespace std;class num {public: num(){n=1;} ~num(){} int get()const{return n;} void set(int x){n=x;}private: int n;};int main(){原创 2013-11-19 16:50:24 · 712 阅读 · 0 评论 -
析构函数 和delete运算符
//delete运算符自动调用析构函数的例程如下:#include using namespace std;class A {public: A(){cout ~A(){cout};int main(){ A *p=new A; //自动调用构造函数 delete p; //自动调用析构函数 return 0;}原创 2013-11-19 16:13:08 · 904 阅读 · 0 评论 -
不带参数的成员变量的初始化
不带参数的成员变量的初始化,在构造函数中引入成员属性并初始化一个值#include using namespace std;class rectangle{public: rectangle():length(3),width(5){cout int area(){return length*width;} private: in原创 2013-11-18 09:09:27 · 855 阅读 · 0 评论 -
拷贝构造函数
#include using namespace std;class A{public:A(int i,int j){n=i;m=j;} //构造函数带两个参数,并将参数的值分别赋给两个私有成员A(A&t){cout //模拟的默认复制构造函数,通过别名t访问对象,然后将该对 //象的成员赋给新对象的成员,完成复制工作v原创 2013-11-18 09:35:42 · 614 阅读 · 0 评论 -
成员变量的初始化和构造函数(1)
//成员变量的初始化顺序的例程如下:#include using namespace std;class demo {public: demo(){x=0;cout demo(int i){x=i;cout ~demo(){cout int get(){return x;} void set(int i){x=i;}priv原创 2013-11-18 09:15:12 · 804 阅读 · 0 评论 -
重载构造函数
多个构造函数重载#include using namespace std;class rectangle{public:rectangle(){coutrectangle(int l,int w){length=l;width=w;cout length * width rectangle(int l,int w,int h){length=l;wi原创 2013-11-18 09:04:52 · 671 阅读 · 0 评论 -
new 运算符的使用
/*使用NEW运算符在堆中开辟一块新空间,例程如下:#include using std::cout;class A{public:A(){cout};int main(){A *p; //声明一个属于A类的指针pp=new A; //使用new运算符创建一块堆中空间,它的大小由类A的数据成员的类型和数量//来定,由于堆在内存中都是匿名的,因原创 2013-11-18 09:43:52 · 1139 阅读 · 0 评论 -
深层拷贝构造函数
#include using namespace std;class A {public: A(){x=new int;*x=5;} //创建一个对象的同时将成员指针指向的变量保存到 新空间中 ~A(){delete x;x = NULL;} //析构对象的同时删除成员指针指向的内存空间,为了稳妥起见将指针赋为空 A(const A &a)原创 2013-11-19 16:24:40 · 699 阅读 · 0 评论 -
继承与派生
派生是继承后,又修改某些属性或者增加某些功能#includeclass father{ private: int Ft,Fh; public: void SFtall(int Ftall){Ft=Ftall;} //设置父亲身高 void SFweight(int Fweight){ Fh=Fweight; } //设置体重 void coutF()原创 2013-11-20 17:46:23 · 667 阅读 · 0 评论 -
公有,保护,私有 派生的成员属性
1.公有派生的前提下,基类的公有成员在派生类中仍然是公有的2.公有派生的前提下,派生类将基类的保护成员也原封不动地继承过来了3.公有派生的前提下,基类的私有成员在派生类中不可访问,只能通过父类的public函数借口来访问私有成员原创 2013-11-20 18:18:15 · 1054 阅读 · 0 评论