C++学习笔记(三)类与对象

面相对象的方法的目的:解决软件产业化问题

对象之间通过消息来通讯

抽象(数据抽象<int Hour>、代码抽象<SetTime( )>)—具体

类可以实现数据的封装、隐蔽、继承和派生

类包含:属性和行为

对象是类的实体

内联成员函数 关键词inline/直接在class内实现à适用于功能较为简单的成员函数 示例如下↓

        Class A

{

Public: int  GetElemtX ()

  {return x;}

}

         Inline int A :: GetElemtY()

 { return y; }

初始化 ≠ 赋值   初始化à构造函数

拷贝构造函数

         类名 (类名 &对象名) {  }    //参数必须是本类对象的引用 不需要拷贝对象副本

         拷贝构造函数会自动生成 à 自动做对应数据的意义复制

                 Point :: Point (Point &p)

                   {  X=p.x;  Y=p.y;  }

         调用 : Point B = A;

结构体与类的区别:结构体默认为public、类默认为private

联合体 union 所有元素共用一段内存(同一时间段只存在一个数据)

作用域:对象可用的范围 / 不可用≠消失 à生存期

         作用域:函数原型作用域 à 参数表)”内部

                                                        定义重载函数时,变量名不作为重载的因素

                            局部作用域 à { }内部

                            类作用域 à X.m / X::m / Pt->m

                            文件作用域 起始于定义位置,终止于文件结尾(全局变量)

                            一般内存能够访问外层变量,除非内层中如果有同名的变量会屏蔽外层变量(使用 :: 依旧可以访问)

         生存期:

                            静态生存期 à 与文件生存期一致(全局变量/static变量)

                                               无对象的时候可以通过对象名调用static成员(函数/对象)à Point::ShowCount();

                            动态生存期 à 起始于定义,终止于命名作用域结束

类之间的数据共享:     类的静态成员(数据成员&成员函数)<公有成员>

                                               友元<私有成员>

友元: 对数据封装和隐藏机制的破坏à提升效率,威胁数据安全

                            友元函数:friend float Dist(Piont &a,Piont &b);

                            友元类     Class A

                                               {

                                                        Friend class B;

                                                        Private: int x;

}             

Class B

{

Public: void Set(int i);

Private: A a;

}

 

Void B::Set(int i)

{ a.x=i; }

共享数据的保护:常对象 const 类名 对象名 必须进行初始化,且不能被更新

                                     常引用 const 类型说明符 &引用名 被引用数据不能更新

                                     常数组 const 数组名[大小]  数据元素不能被更改

                                     常指针 暂无 指向的对象不能通过指针修改 Pt->X=12;(错误)

                                  只有常函数能调用常对象 void Print () const

                                               Const R b(10,20);   b.print();//调用void print() const

                                  Const 数据成员:    非静态 只能在外部赋值 const int A::b=10;

                                                                           静态 A::A(int i) : a(i) { } 只能在构造列表中赋值,不允许放到“{ }”中

继承与派生

               继承的目的:实现代码的重用

               派生的目的:对原有程序的改造

               一个派生类有多个基类称为多继承,直接基类、间接基类。私有成员会被继承,只有构造、析构函数不会被继承。私有成员无法被直接访问(本类成员函数、友元才能访问)

               示例:

               组合>单继承>多继承

               派生的过程:1.吸收基类成员 2.改造基类成员(如同名屏蔽) 3.添加新成员

               类型兼容:

                   public派生对象在使用上可以被当作基类。表现在:派生类的对象可以以隐含转换为基类对象、可以初始化基类的引用、派生类指针可以隐含转换为基类指针。à通过基类对象名、指针只能访问被继承的成员

 

 

未使用虚函数                                                                                                                                                    使用虚函数

                                                                                                                      

 

                                                                                                                                                  

                                                                                    不要定义继承来的非虚函数

多继承:        class 派生类名: 继承方式1 基类名1, 继承方式2 基类名2…

                            构造基类:调用基类构造函数

                            一般构造A->B->C            多继承构造(class C:public B, public A)

                                                        

                            继承拷贝构造函数:直接将参数赋值给基类拷贝构造函数(向上转型:派生类对象可以作为基类对象使用)         C::C(const C &c1):B(c1){ … }

                            虚基类(所有派生类都要负责给最远基类传递参数)和虚函数可以解决多继承带来的二义性问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值