• C++程序设计入门(上) 之对象和类


    面向对象编程:

    如何定义对象?  同类型对象用一 个通用的类来定义

    class C { int p; int f(); }; C ca, cb; 

    一个类用变量来定义数据域,用函数定义行为。

    class Cirle
    {
        public:
            double r;
        Cirle()
        {
            r = 1;
        }
        Cirle(double newr){
            r = newr;
        }
        double get()
        {
            return r * r *3.14;
        }
    }; 

    构造函数:

    类中有 一种特殊的“构造函数”,在创建对象时被自动调用。(通常用来初始化类)

    Constructors:

     Initialize objects (构造函数:初始化对象)

     Has the same name as the defining class (与类同名)

     NO return value (including "void"); (无返回值)

     constructors can be overloaded (可重载)

     may be no arguments (可不带参数)

    类可不声明构造函数,编译器会提供一个带有空函数体的无参构造函数。

    用类创建对象:

    ClassName objectName; eg:Circle circle1;

    ClassName objectName(arguments); eg:Circle circle2(5.5);

    对象访问运算符(.):

    objectName.dataField // 访问对象的数据域

    objectName.function(arguments) // 调用 对象的一个函数

    eg:circle1.radius = 10;

            int area = circle1.getArea(); 

    类似于结构体的使用方法。但当问数据域的时候,类的数据域必须是共有属性。

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    class Cirle
    {
        public:
            double r;
        Cirle()
        {
            r = 1;
        }
        Cirle(double newr){
            r = newr;
        }
        double get()
        {
            return r * r *3.14;
        }
    }; 
    int main()
    {
        Cirle a;
        Cirle b(2.0);
        cout << a.get() << endl;
        cout << b.get() << endl;
        return 0;
    } 

    对象指针与动态对象:

    Circle circle1;
     Circle *pCircle = &circle1;
    cout << "The radius is " << (*pCircle).radius << endl; 
    cout << "The area is " << (*pCircle).getArea() << endl;
    
    (*pCircle).radius = 5.5;
    cout << "The radius is " << pCircle->radius << endl; 
     cout << "The area is " << pCircle->getArea() << endl;

    在堆中创建对象:

    在函数中声明的对象都 在栈上创建,函数返回, 则对象被销毁。

    为保留对象,你可以用new运算符在堆上创建它。

    ClassName *pObject = new ClassName(); //用无参构造函数创建对象
    ClassName *pObject = new ClassName(arguments); //用有参构造函数创建对象
    
    Circle *pCircle1 = new Circle(); //用无参构造函数创建对象 
    Circle *pCircle2 = new Circle(5.9); //用有参构造函数创建对象
    
    //程序结束时,动态对象会被销毁,或者 
    delete pObject; //用delete显式销毁

    数据域封装:

    数据域采用public的形式有2个问题

    1.数据会被类外 的方法篡改

    2.使得类难 于维护,易出现bug

  • 相关阅读:
    [BZOJ2287]【POJ Challenge】消失之物(DP)
    [BZOJ1596] [Usaco2008 Jan]电话网络(树形DP || 贪心)
    [BZOJ3339] Rmq Problem(线段树)
    [BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)
    [BZOJ1595] [Usaco2008 Jan]人工湖(单调栈)
    [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)
    [POJ2778]DNA Sequence(AC自动机 + DP + 矩阵优化)
    [TyvjP1519] 博彩游戏(AC自动机 + DP)
    【模板】AC自动机
    [poj3744] Scout YYF I【概率dp 数学期望】
  • 原文地址:https://www.cnblogs.com/wjc2021/p/10673832.html
Copyright © 2020-2023  润新知