• C++学习4-面向对象编程基础(面向对象概念,定义类,定义对象)


    什么是面向对象?

    在软件的设计过程中的两种方式:

    • 把程序按照算法的执行步骤来拆解,一步步实现,这是面向过程编程;

    • 把程序按照现实世界的理解,分成不同对象,通过多个对象之间的相互作用,来完成程序的最终功能,这是面向对象编程;

    面向对象的三要素:类、对象和继承
    面向对象特点:封装、继承、多态
    面向对象好处:

    按照我们对于现实世界的理解来把程序划分为不同的对象。

    • 容易理解为整个程序的设计思路:使用继承、封装、多态的特性,设计出高内聚、低耦合的系统结构.
    • 容易维护现有代码.
    • 容易拓展新增功能;

    类的定义格式

    可以使用struct或class作为关键字定义类,但使用struct的保护级别为public,而class的保护级别为private。通常使用class关键字;

    类成员权限

    关键字:public、private、protected作为访问权限控制符规定成员的访问权限;

    • public(公有成员):公有成员提供了类的接口功能,不仅可以被成员函数访问,而且还可以在程序中被访问。
    • private(私有成员):私有成员是被类隐藏的数据,只有该类的成员或者友元函数才可以访问‘
    • protect(保护成员):保护成员的成员变量,只允许在本类或者派生类中才可以访问,且在继承中保护成员的成员变量由保护成员变为私有成员;

    类对象定义与成员的引用

    对象定义

    对象是类的实例,任何一个对象都是属于某个已知类的,对象定义格式如下

    <类名> <对象名表>;

    访问对象函数

    一个类可以创建无数个对象,其任何一个对象都可以使用该类的操作,它们在不同的对象上反映出来。调用的成员函数与某个对象捆绑在一起的,“.”作为间隔符号指明哪个对象用了数据成员、成员函数;

    访问一般对象的成员

    <对象名>.<数据成员名>;

    <对象名>.<成员函数名>;

    访问指向对象的指针的成员

    <对象指针名>-><数据成员名>

    <对象指针名>-><成员函数名>

    this指针

    当我们在调用成员函数时,每个类的成员函数中都隐含了一个this指针,该指针指向正在调用成员函数的对象;如同于执行this=&s;语句;
    所以无论哪个对象调用,成员函数从获得的参数(显式的实参和隐含的对象地址)来判断都不会弄错。

    实例代码

    以下代码建立了一个名为CDate的类,类中声明了void类型的set()函数与void类型的print()函数;

    在main()函数中定义CData类的对象名为date,并使用data对象调用set()函数与print()函数;其中对象名为qdata是以指针的形式定义的对象,使用指针形式访问qdata对象的成员;

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    class CDate
    {
    public:
    	void set(int m, int d, int y);
    	void print();
    
    protected:
    	int m_year;
    	int m_month;
    	int m_day;
    };
    void CDate::set(int m, int d, int y)
    {
    	cout << "this的地址:" << this << endl;
    	this->m_year = y;
    	this->m_month = m;
    	this->m_day = d;
    }
    void CDate::print()
    {
    	cout << m_year << "-" << m_month << "-" << m_day;
    }
    
    int main()
    {
    	CDate date;
    	date.set(11, 9, 2016);
            date.print();
        
        CDate * qdate;
        qdate->set();
        
        return 0;
    }
    
    

    定义成员函数

    定义类中的成员函数可以采用以下三种方式:

    1.成员函数的定义及实现在类体中完成;

    2.成员函数的定义及实现在类体外完成;

    3.成员函数的定义及实现与类体在不同的文件中完成;

    example1:

    在类体外定义成员函数时须按下述格式:

    <函数类型><类名>::<成员函数名>(参数){ 函数体 }

    注意:"::" 为作用运算符,用来标识某个成员函数是属于哪个类的

    
        class CTdata{
        public:
        	void show(          //类内定义,然后实现;
        	printf("hello");
        	);  
        	void show1();
        private:
        };
        void CTdata::show1()   //类外引用作用域实现
        {  printf("hello2");}
    
    
    example2:

    成员函数的定义及实现与类体在不同的文件中完成;

    
        //tdate.h
        class Ctdate2
        {
        public:
        	void show3();
        }
        
        //tdate.cpp
        #include "tdate.h"
        
        class Ctdate2::show3( printf("hello3"); );
    
    

    作用域

    类的作用域简称类域,类域的范围是指在类所定义的类体中,该类的成员局部于该类所属的类域。除了静态成员与静态成员函数外,一个类内的任何成员函数能访问同一类的任何成员变量;

    当把成员定义为私有和保护时,外界访问被限制。域之前的权限,域与域之前的权限大小应是如下优先顺序:

    文件域 > 类域 > 函数域

    不同存储类的对象具有不同的生命期,对象的生存期是指对象从创建开始到被释放为止的存在时间,即该对象的寿命,按生命期的不同,对象可分为如下三种:

    • 局部对象:定义在一个函数体内或程序块内,作用域和生命周期都是局部的;
    • 全局对象:定义在某个文件中,作用域为包含该文件的整个程序,生命期是全局的;
    • 静态对象:分为内部静态对象和外部静态对象,生命期都是全局的,前者作用域定义它的函数体和程序块内;后者作用域为定义它的文件。

    类与结构体的区别

    • 默认访问区别:

    类定义中默认情况下的成员访问级别是private

    结构体定义中默认情况下的成员访问级别是public

    • 初始化的区别:

    类可以通过构造函数与析构函数初始化数据成员

    结构体的初始化依靠特定的语法格式

    注意:结构体也可以封装函数,但仅限于C++,C语言是不可以的;

    实例代码

    #include "stdafx.h"
    struct Test
    {
    	void fun()
    	{
    		printf("hello world");
    	}
    	int a;
    };
    class CTest
    {
    	int a;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Test stc1;
    	CTest stc2;
    	stc1.fun(); //结构体也可以封装函数,仅限于C++,C语言中是不可以的.
    	stc1.a = 10;//结构体的默认保护属性是public
    	stc2.a = 20;//类的默认保护属性是private
    	return 0;
    }
    
  • 相关阅读:
    k8s 重要概念
    k8s 核心功能
    5 秒创建 k8s 集群
    学习 Kubernetes 的 Why 和 How
    Yeelink初步体验
    为Qemu aarch32添加BeautifulSoup4模块
    实现Qemu aarch32虚拟开发板ping www.baidu.com
    利用/proc/pid/pagemap将虚拟地址转换为物理地址
    加快Qemu Aarch32虚拟开发板的启动速度
    为Qemu aarch32开发板添加sd卡
  • 原文地址:https://www.cnblogs.com/17bdw/p/6055791.html
Copyright © 2020-2023  润新知