随笔分类 - 语言_c++
摘要:1. 动态多态在面向对象语言中,接口的多种不同实现方式即为多态。多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数。多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的。多态可以让父类的指针有“多种形态”,这是一种泛型技术。(所谓泛型技术,就是试图使用不变的代码来实现可变的算法)。2. 虚函数2.1虚函数定义在基类的类定义中,定义虚函数的一般形式:Virtual 函数返回值类型 虚函数名(形参表){函数体}虚函数必须是类的非静态成员函数(且非构造函数),其访问权限是public。2.2 虚函数的作用虚函数的作用是实现动态联编,也就是在程
阅读全文
摘要:转自:http://club.topsage.com/thread-265349-1-1.htmlJava并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同: (1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,但是任何一个C++程序员都不得不承认C++语言在提供强大的功能的同时也提高了程序含BUG的可能性。Java语言通过改变语言的特性大大提高了程序的可靠性。 (2)Java语言不需要程序对内存进行分配和回收。Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类..
阅读全文
摘要:C++中 public,protected, private 访问标号小结第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。注:友元函数包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。第二:类的继承后方法属性变化
阅读全文
摘要:转自:http://blog.csdn.net/haoel/article/details/1948051对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 1. 基本的虚函数表这里我们着重看一下这张虚函数表。
阅读全文
摘要:转自:http://www.educity.cn/zk/gjyy/201306271108011682.htm多态性是面向对象设计语言的基本特征。仅仅是将数据和函数捆绑在一起,进行类的封装,使用一些简单的继承,还不能算是真正应用了面向对象的设计思想。多态性是面向对象的精髓,也是难点。在C++中,多态性是通过虚函数来实现的。1. 为什么需要虚函数 为了说明虚函数的作用,我们先看一个程序实例:#include class vehicle{ int wheels; float weight;public: void message(void) {cout message(); //输出Ve...
阅读全文
摘要:转自:http://www.cnblogs.com/lintong/archive/2012/07/28/2613002.html1. 什么是多重继承的二义性class A{public: void f();}class B{public: void f(); void g();}class C:public A,public B{public: void g(); void h();};如果声明:C c1,则c1.f();具有二义性,而c1.g();无二义性(同名覆盖)。2. 解决办法一 -- 类名限定调用时指名调用的是哪个类的函数,如c1.A::f();c1....
阅读全文
摘要:C++中,子类若有与父类同名的成员变量和成员函数,则同名的成员变量相互独立,但同名的子类成员函数重载父类的同名成员函数。举例如下:#include using namespace std;class A{public: int a; A(){ a = 1; } int get_a(){ return a; } void print(){ cout << "This is A. a: " << a << endl; }};class B: public A{public: int a; B()...
阅读全文
摘要:转自:http://www.cnblogs.com/icemoon1987/archive/2012/10/01/2709572.html1. 面向对象:对象、类、继承2. 构造函数:类的数据成员不能在类定义时初始化(因为只是声明),要用构造函数构造函数分两步执行:初始化成员(初始化列表),执行构造函数当类成员没有默认初始化式时,需要用初始化列表显示表示(const 成员,引用)初始化成员的顺序,与成员在初始化列表中的顺序无关,按照成员定义顺序合成的默认构造函数不会初始化内置或复合类型成员(指针、数组)构造函数不能为 const,因为 const 成员函数不能修改类中成员构造函数不能为虚函数,
阅读全文
摘要:构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。 如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:if(子类没有自定义构造函数){ if(基类没有自定义构造函数){ 用子类定义对象时,先自动调用基类的默认构造函数,再调子类的默认构造函数。 } else if(基类有自定义无参构造函数)...
阅读全文
摘要:文档主要来自:http://blog.csdn.net/yjkwf/article/details/60672671. static类型用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中。static定义的静态常量在函数执行后不会释放其存储空间。可以实施封装,将其放在private或protected区域中。static成员没有this指针,它不是任何一个对象的组成部分,推荐用“类名::static成员名调用”。static成员函数声明时应写明static关键字,在定义时不能加static关键字。static数据成员声明时应写明static关键字,在定义时
阅读全文