C++特性笔记

此处是本人对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

六、&符号

&符号在定义的时候表示定义了一个引用,在其他地方使用表示取地址符。

函数参数使用&可以避免拷贝带来的开销。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值