此处是本人对c++的一些笔记,c++高手请直接略过。翔哥看到了也请略过。
一、c++类中的变量和函数默认都是private属性的,只能该类自己能访问。c++的类不同于java语言,c++的对象不new也可以访问,因为c++语言会使用默认的构造方法对类进行实例化。
二、关于虚函数
函数前使用virtual修饰,表示该函数是虚函数,那么虚函数有什么用呢?虚函数对于程序的多态起到了很重要的作用。
具体的使用简单介绍一下:
class A
{
public:
virtual void run()
{
cout << "A run" << endl;
}
};
class B : public A
{
void run()
{
cout << "B run" << endl;
}
}
然后在main函数中,我们如此调用:
B *pB = new B();
pB->run();
此时应该打印的是“B run”,但是如果B没有实现run这个函数的话,那么打印的就是"A run",即执行了A中的run函数。
三、关于纯虚函数
如果父类的某个函数是virtual修饰,同时该函数没有方法体,该函数赋值为1,那么该函数是虚函数,如:
virtual void jump() = 0;
含有纯虚函数的类是抽象类,抽象类是不能实例化对象的,所以子类必须实现该纯虚函数才能实例化对象。这是强制的,所以对于开发人员的结构设计来说很有用。如果子类没有实现该函数,那么,子类也是纯虚函数,所以是不能实例化对象的。
四、关于继承时的构造方法
class Animal
{
public:
Animal(int x ,int y)
{
}
~Animal()
{
}
virtual void run()
{
cout << "animal run" << endl;
}
void breathe()
{
cout << "animal breathe" << endl;
}
//这样写,表示该函数是纯虚函数,含有纯虚函数的类是 抽象类,是不能实例化对象的。
//所以,子类如果不重写纯虚函数的话,那么子类也仍然是纯虚函数,子类也就不能实例化纯虚函数。这样子类就必须去实现这样一个函数,才能实例化对象。
virtual void jump() = 0;
};
class Fish : public Animal
{
public:
//因为Animal的构造函数是带参数的,而不是默认的无参构造函数了,所以这里要用这种方式来调用
//同时,这里也可以对常量进行初始化,如下
Fish():Animal(40 ,30) ,a(1)
{
cout << "Fish first constructor" << endl;
}
~Fish()
{
cout << "Fish destructor" << endl;
}
void run()
{
cout << "Fish run" << endl;
}
void jump()
{
}
private:
const int a;
};
可以Fish在继承Animal时,因为Animal的构造函数是带两个参数的,而Fish的构造函数去找Animal的默认构造函数,这时会找不到Animal:Animal()的。所以这里先调用父类Animal的构造函数.
Fish():Animal(40 ,30)
如果想对Fish的变量a进行初始化,可以在这里进行。
Fish():Animal(40 ,30) ,a(1)
五、预编译指令符
为了避免类文件被重复引用,所以我们在定义的时候,就可以使用预编译指令防止重复调用。
#ifndef CLASS_A
#define CLASS_A
class ...................blalala(此处省略很多)
#endif
六、&符号
&符号在定义的时候表示定义了一个引用,在其他地方使用表示取地址符。
函数参数使用&可以避免拷贝带来的开销。