zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    python冲刺(5)列表声称式
    python冲刺(4)切片 等
    python冲刺(3)函数 等
    python冲刺(2)
    python冲刺(1)
    redis初步(1)
    php连接Oracle的时候遇到的编码集问题
    redis初步
    php 命名空间
    指向字符数组的指针与指向整型数组的指针
  • 原文地址:https://www.cnblogs.com/radical/p/3688476.html
Copyright © 2011-2022 走看看