孙鑫VC++ lession2 掌握C++

this-> 指针
因为方法是在代码段中,对于所有的对象都只有一份拷贝
所以在对象在方法调用中,隐含的都会传递一个this指针过去,来区别是那个对象调用的方法

析构函数只有一种无参的~A() 在这里面调用对象的delete()方法来释放内存

 

C++写类的时候class A{}; 后面的大括号要加;

C++中 修饰符这样写,(好像没有类的修饰符)
class A{
public:
  int x;
protected:
  int y;
private:
  int z;
};

 

 

#include <iostream.h>
class Animal
{
//C++中只有三种修饰符public protected private
//class 跟struct的区别: class默认是private,struct默认是public
public:
 Animal()
 {
  cout<<"Animal construct"<<endl;
 }
 Animal(int a){

 }
 void breathe(){
  cout<<"Animal breathe"<<endl;
 }
 //C++的虚函数:
 //不是virtual函数的时候 C++编译器 在编译的时候就绑定了要调用的函数
 //是virtual函数的时候 C++编译器 不会绑定要调用的函数,等到运行的时候再决定调用的函数,这种叫做延时绑定
 //如果子类有调用子类的函数,如果没有调用父类
 virtual void sleep()
 {
  cout<<"Animal sleep"<<endl;
 }


//析构函数在没有子类继承的情况下是任意
//在有子类继承的情况下 只可以是 public 或者 private 因为子类要调用父类的private
protected:
 ~Animal(){
  delete this;
 }
};

class Creature {
 //C++中的纯虚函数,相当于java中的 abstract函数
 //这样的类不能被实例化,继承他的类必须要实现这个方法
public:
 virtual void eat()=0;
};
class Fish:public Animal,public Creature
{
public:
 const int a;
 Fish():Animal(300),a(400) //默认调用父类的带参数构造 然后给个初始值
 {
  cout<<"Fish construct"<<endl;
 }

 void breathe()
 {
  cout<<"Fish breathe"<<endl;
 }

 void sleep()
 {
  cout<<"Fish sleep"<<endl;
 }
 virtual void eat()
 {

 }

 ~Fish()
 {

 }
};

void test_Inherit(Animal *animal)
{
 
 animal->breathe();

 animal->sleep();
}

void main()
{
 Fish fish;
 Animal *animal;
 //能不能强制转换,取决于两个类的内存模型是否一样,
 //Fish中的内存模型可以分成两个部分:一个是从Animal中继承过来的部分,
 //所以强制类型转换后,用调用的都是父类animal的方法
 //如果是java的话,会调用子类的方法
 animal = &fish;
 test_Inherit(animal);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值