C++关于类的一些知识

来源:互联网 发布:js点击关闭弹出框 编辑:程序博客网 时间:2024/05/21 12:42

(以前开始学C++的时候写的,用MarkDown修改后就变成新的一篇了=_=)
1、类

class A{privatestatic int x;public:A(const A &);A& function(){return (*this);}};A a;

 1、A b=a;//调用拷贝构造函数
 2、A b;b=a;赋值运算
 3、function返回引用,将不会调用拷贝构造函数,返回对象会调用拷贝构造函数
 4、const type x = xxxx;const 与 &声明的变量需初始化;
 5、在类里面声明静态变量,需要在类外初始化;int A::x= 0;
 6、this为对象地址,*this为对象;

2、关于类与派生类(is-a关系)//例如菠萝是一种水果

class B:pubic A{private:int count;public:B():A();B(const B &a,int c=0):A(a),count(c);//将B类声明的对象赋值给a,&a=B的对象可访问A类成员,且调用A类拷贝构造函数初始化A类变量。};

 1、B c;A *p=new B(); A类指针new为B类,即向下转换, A *p=&c; A &p=c;
公有继承后,p 为A类指针,可调用A类public函数,也可调用派生类的虚函数,即基类通过指针访问派生类函数。
 2、纯虚函数 vitrual type function()=0;将声明类为抽象类,该类不可实例出对象,也不可在类内定义该函数。
 3、派生类复制构造函数已注释。
 4、在派生类使用基类函数方式例如:A::funciton();
 5、访问基类对象方法:因为继承中都是用类初始化,而非对象,所以可以在派生类中声明返回类型为基类的函数。
例如:

class A:private string{publicstring &getstr(){return  (string &)*this;  //string &副本对象=*this,基类指向派生类}};7、重载派生类输入输出流时A &istream <<(const A&a,istream &os){os<<(string &)a;//这将调用基类string的重载<<运算,要是基类没有重载运算将会报错return os;}

3、类与类(has-a关系)//菠萝也可以在午餐的时候吃

class A{}class B{private:A *a;public:B():};

 1、与继承关系不同的是,可以在B类用A类指针或者对象进行初始化,而继承关系中是用类名,即类名调用基类构造与复制构造或者构造函数。
  比如:若B继承A,则初始化为B(const B &b):A(b)、B(const B &b,const A &a1):A(a1);
若B has A,则初始化B(const B&b,const A &a1):a(a1);