C++语言由Bjarne Stroustrup开发,兼容于C语言,以面向对象方式,提供更直观的程序设计方法,更强大的语言开发能力,更严谨的安全管理和更有效的程序代码组织机制。
一、类和对象:支持面向对象编程
二、类的继承:一个类(继承类)可在另一个类(基类)的基础上,增设变量和函数,从而实现了基类的一个扩充
三、函数重载:重载的函数都具有相同的函数名,但要求参数的类型或个数必须不同,以使编译器确切知道所调用的函数是哪一个重载函数
例1:能编译通过 例2:不能编译通过,因为仅是返回值不同,编译器是无法知道调用哪个func(3)
int func(int i); int func(int i);
double func(double d); double func(int i);
如要求覆盖基类函数,必须用vritual关键字进行修饰,声明为虚函数
例如:
#include
class CBase {
public:
virtual void f(int x) { printf("CBase::f : %d\n", x); }
void g(float x) { printf("CBase::g: %f\n", x); }
};
class CDerived:public CBase {
public:
void f(int x) { printf("CDerived::f : %d\n", x); }
void g(float x) { printf("CDerived:g : %f\n", x); }
};
void main() {
CDerived DerivedObj;
DerivedObj.f(3); //正常执行继承类f函数
DerivedObj.g(6.0f); //正常执行继承类g函数
CBase *pBaseObj = &DerivedObj;
pBaseObj->f(3); //正常执行继承类的f函数
pBaseObj->g(6.0f); //实际执行基类的g函数
}
此外,如果在虚函数的声明之后加上“=0“的标记,函数就成为纯虚函数。该类称为抽象类。抽象类不能创建对象,作为继承类的接口规范,要求继承类必须提供一个纯虚函数的具体实现,否则产生编译错误。
四、访问控制:public, protected and private
五、操作符重载:操作符的重载是一种特殊的函数重载
六、显式类型转换:C++仍然支持C语言中的隐式类型转换,但提供了4个显式的类型转换操作函数reinterpret_cast, const_cast, static_cast 和 dynamic_cast
reinterpret_cast
const_cast
static_cast
dynamic_cast
七、异常处理:C++提供了一种更完善的异常处理机制
#include
int main(void) {
try{
printf("try1\n"); throw 10; //产生一个int异常
} catch (int &i) { //使用引用,省去复制开销
pintf("try1: %d\n", i);
}
}
异常可以
八、名字空间:传统大型软件项目的开发,比较容易出现类、变量或函数同名的问题。或与标准库出现名字重复,以致覆盖了标准库的类和函数,或与第三方提供的库出现名字重复,此时会提示无法编译的错误,又或者本项目各模块之间出现名字重复。为解决同名冲突问题,使用C++提供的名字空间技术。
#include
namespace NS1 {
int a = 1;
}
namespace NS2 {
int a = 8;
}
int main(void) {
printf("NS1: %d\n", NS1::a);
printf("NS2: %d\n", NS2::a);
return 0;
}
九、友员函数:通常一个成员函数只可对它所在类的数据成员进行访问,如果要同时访问多个类的数据成员(包括私有成员),可在这些类中都声明一个友员函数。友员函数是独立于各个类的。
#include
class B;
class A {
bool bfinish;
friend bool check(A a, B b);
public:
A(bool b) { bfinish = true; }
};
class B {
bool bfinish;
friend bool check(A a, B b);
public:
B(bool b) { bfinish = b; }
};
bool check(A a, B b) { //定义友员函数
if (a.bfinish && b.bfinish) return true;
else return false;
}
int main(void) {
A a(true);
B b(false);
if (check(a, b)) printf("bath of bfinish are true\n");
return 0;
}
十、内联函数:一种用于提高代码效率的技术,用适度的代码空间膨胀,来换取较高的执行速度。编译器将展开内联函数
十一、静态成员:该类的对象可直接访问静态成员变量,只有静态成员函数才能对静态成员变量进行访问操作