• C++学习笔记----类与对象


    最近在看C++的继承与派生机制  愈发感觉有必要复习下前几章的知识--毕竟 大学这么多课 也就对C++有兴趣了..

    参考资料:C++语言程序设计 第4版 郑莉

    有句话 很经典---万事万物皆对象-object

    面向对象程序设计的4大特点:1.抽象                      2.封装                          3.继承                                  4.多态

    抽象      分为 数据抽象 和 行为抽象

    封装      就是一种安全的措施 将自己不想让别人看到的东西“隐藏"起来 通常用private来实现 来达到对成员访问权限的合理控制

    继承      就是使代码更具 层次感 你所要实现的功能 如果已经有上层实现了 那就直接继承它吧

    多态      一段程序能够处理多种类型对象的能力--强制多态    重载多态   类型参数化多态     包含多态

    上面所讲的是 一个整体的框架 我们需要做的是 深入去了解  就如 你邂逅一个姑娘 你被她吸引 你想在她身上探索更多 那就要深入 深入 。。。。。

    PS:我所讲的 可能会毫无 逻辑感 本就是 自娱自乐 .....

    数据类型 = 基本数据类型 +  自定义数据类型  每一种数据类型都是对一类数据的抽象 每一个变量都是其所对应的数据类型的一个实例

    如果 没看过这本书 我肯定一直 以为  int i 声明了一个int型的变量 变量名是i  其实它还蕴含了很多秘密

    它限定了我们对变量的操作   每一种 数据类型 都包括了数据本身的属性和对数据的操作

    类 -数据成员 和 函数成员 组成

    class 类名称

    {

    public:

      外部接口

    protect:

      保护型成员

    private

      私有成员

    }

    类成员的访问控制----

        private:  只能被本类的成员函数访问 来自类外部的访问都是非法的

        protect:  与private的区别 在于继承实现方式的不同对子类访问的不同影响

        public:    可以被类外部访问

    假设 有个类:

      class A{};  A a  则  A--类的名字    a--对象名字

    这里 想到个很有意思的一段代码:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 class A
     5 {
     6 
     7 };
     8 
     9 int main()
    10 {
    11     printf( "%d
    " , sizeof(A) );
    12     getchar();
    13     return 0;
    14 }
    View Code

    我也懒得卖关子了 就直接给出答案了: 1 

    至于原因 就直接拿出性神和龙龙贴过的解释:

    类的实例化是在内存中分配一块地址 每个实例在内存中都有一块独一无二的地址 同样 空类也会被实例化 所以编译器会给它隐含地添加一个字节 这样空类实例化就有独一无二的地址了 所以 空类的sizeof 答案是1  而不是 0   (在这里 感谢 性神 给出那么 权威的 解释)

    C++ 很多的小细节 真的 很耐人寻味 。。。

    访问数据成员: 对象名.数据成员名

    调用函数成员:  对象名.函数成员名( 参数表 )

    接下来讲个 以前学C的时候 没接触过的一种函数-----内联成员函数-------隐式声明    显示声明---------

    使用 内联函数----该函数 可能会被 频繁调用 且代码简单 不能含循环    它是在编译过程中 插入到 每一个 调用它的地方

    利弊:   减少调用的开销   提高执行效率   增加代码长度

    隐式声明:  函数体直接放在类体之中

    1 class A
    2 {
    3 public:
    4     void say()
    5     {
    6         printf( "no meaning" );
    7     }
    8 };
    View Code

    当然 可以say 函数的返回值 前面 加上 inline  我也建议这样 更能使 代码具有可读性

    显示声明: 类中 仅是声明了这个函数

     1 class A
     2 {
     3 public:
     4     void say();
     5 };
     6 
     7 inline void A::say()
     8 {
     9     printf( "girl girl ");
    10 }
    View Code

    下面所要提到的 也感觉是最为关键的  构造函数 析构函数

    构造函数---主要功能 实现初始化--( 在定义对象的时候进行的数据成员设置 ) 将对象初始化为 一个特定的状态

    构造函数 虽然也是成员函数 但它是很特殊的:   函数名与类名相同   无返回值

    基本类型变量的初始化过程: //  累了 晚上 再写下去  感觉写的太基础了  没有自己看的时候 那种深度.....

          

     

    just follow your heart
  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/radical/p/3688476.html
Copyright © 2020-2023  润新知