c++基础:C++的一些基本概念

//参考书:visual c++面向对象编程教程(王育坚) 一:C++的成员属性有3种 1.private属性(默认属性)的成员只能由本类成员函数访问或调用; 2.protect属性的成员只能由本类成员函数或派生类成员函数访问或调用; 3.public属性能被本类函数或其他类函数通过对象访问或调用;

C++的派生方式有3种 派生类定义:class <派生类名> : [<派生方式>]<基类名> 1.public派生:基类成员的访问权限在派生类中保持不变; 2.private派生(默认):基类所有的共有和保护成员在派生类中都成为私有成员; 3.protect派生:基类所有的共有和保护成员在派生类中都成为保护成员;

二:静态成员static 1.静态成员变量必须在类定义的外部初始化; 2.静态成员函数只能访问静态成员; 3.可以将对象作为静态成员的参数,然后在静态成员函数中通过对象访问它的非静态成员

三:友元(友元函数/友元类)friend 友元可以是一般的函数,其他类的成员函数,友元类;友元函数/友元类可以访问friend声明所在的类的所有成员;一个类的友元函数一般将该类的引用作为函数形参建议友元声明放在类体的开始位置,

四:派生类的构造函数 设A是基类,B是派生类:                        则B的构造函数定义为:  B::B(<形参声明>):A(<参数表>) 参数表是形参声明中所给出的部分参数,是要传递给基类的构造函数的参数,这样,派生类的构造函数既可以初始化自己的数据成员,也可以通过基类构造函数初始基类的数据成员,当然,参数表中参数的个数和类型要与基类的某个构造函数的形参声明一致

五:虚基类---是一种派生方式 由于C++允许多重继承,一个派生类中可能保留某个基类的多个实例,会导致编译二义性错误;例如:A派生了B和C; B和C一起派生了D,则D中保留了两个A的实例(一个来自B,一个来自C)如果A中有某成员X,则d.x就会有二义解决方法: 1)利用作用域限定符(::)把基类的数据成员与下一层基类关联起来。缺点:浪费存储空间,使用时要指明访问的成员时那个类间接派生过来的,使用麻烦;     例如: d.x可以改为d.B::x 或 d.C::x 2)虚函数:在派生时基类名前加virtual,注意基类定义时不需要virtual关键字     例如: class B : public virtual A   ...     class C : public virtual A   ...     class D : public B, public C   ...       这样就会在D中只有一个A的实例,d.x也时合法的

六:多态性 1.静态多态性---重载:                 在函数名或运算符相同的情况下,编译器在编译阶段就能够根据函数参数类型的不同来确定要调用的函数; 2.动态多态性---虚函数:                    可以用基类指针指向派生类对象,此时该指针只能访问基类的数据成员和函数;            当派生类中某函数覆盖了基类的某函数(相同的函数名和参数)时,该指针也只能访问基类函数;            如果在定义基类函数时加virtual,则该指针就调用派生类的函数了;                   不能将构造函数定义为虚函数;                   可以将析构函数定义为虚函数:例如基类指针指向一个用new创建的派生类对象时,析构函数必须定义为虚函数,否则delete该派生类对象时只调用基类的析构函数

七:抽象类和纯虚函数: 抽象类:至少有一个成员函数没定义具体实现,或定义了一个protected访问属性的构造函数或析构函数,抽象类不能声明对象,但可以声明抽象类的指针;注意定义抽象类无需abstract 纯虚函数:抽象类中那些没定义具体实现的函数,在抽象类中声明前加 virtual

猜你喜欢

转载自blog.csdn.net/fleas/article/details/2566916