zoukankan      html  css  js  c++  java
  • C++_对象成员

    对象成员

    如果一个类的对象是另一个类的数据成员,则称这样的数据成员为对象成员。

    class A
    {
        //...
    };
    class B
    {
        A a; //类A的对象a为类B的对象成员
    public:
        //…
    };
    

    对象成员的初始化

    使用对象成员着重要注意的问题是对象成员的初始化问题,即类B的构造函数如何定义?

    例如有以下的类:

    class X{
        类名1 对象成员名1;
        类名2 对象成员名2;
        …
        类名n 对象成员名n;
    };
    

    一般来说,类X的构造函数的定义形式为

    X::X(形参表0):对象成员名1(形参表1),…,对象成员名i(形参表i) ,…,对象成员名n(形参表n)
    {
        // …构造函数体
    }
    
    【例3.26】 对象成员的初始化
    #include<iostream.h>
    class A{
    public:
        A(int x1, float y1)
        { x=x1; y=y1; }
        void show()
        { cout<<"
     x="<<x<<" y="<<y; }
    private:
        int x;
        float y;
    };
    class B{
    public:
        B(int x1,float y1,int z1):a(x1,y1)
        { z=z1; }
        void show()
        {
            a.show();
            cout<<" z="<<z;
        }
    private:
        A a;
        int z;
    };
    main()
    {
        B b(11,22,33);
        b.show();
        return 0;
    }
    

    具有对象成员的类构造函数的另一种定义

    B(A a1, int z1):a(a1)
    { z=z1; }
    main()
    {
        A a(11,22);
        B b(a,33);
        b.show();
        return 0;
    }
    
    【例3.27】 对象成员的应用
    #include<iostream.h>
    #include<string.h>
    class Score{
    public:
        Score(float c,float e,float m);
        Score();
        void show();
        void modify(float c,float e,float m);
    private:
        float computer;
        float english;
        float mathematics;
    };
    Score∷Score(float c,float e,float m)
    {
        computer = c;
        english = e;
        mathematics = m;
    }
    Score∷Score()
    { computer=english=mathematics=0; }
    void Score∷modify(float c,float e,float m)
    {
        computer = c;
        english = e;
        mathematics = m;
    }
    void Score∷show()
    {
        cout<<"
     Score computer: "<<computer;
        cout<<"
     Score english: "<<english;
        cout<<"
     Score mathematics: "<<mathematics;
    }
    class Student{
    private:
        char *name; // 学生姓名
        char *stu_no; // 学生学号
        Score score1; // 学生成绩(对象成员,是类Score的对象)
    public:
        Student(char *name1,char *stu_no1,float s1,float s2,float s3);
        ~Student(); // 析构函数
        void modify(char * name1,char *stu_no1,float s1,float s2,float s3);
        void show(); // 数据输出
    };
    Student∷Student(char *name1,char *stu_no1,float s1,float s2,float s3) :score1(s1,s2,s3)
    {
        name=new char[strlen(name1)+1];
        strcpy(name,name1);
        stu_no=new char[strlen(stu_no1)+1];
        strcpy(stu_no,stu_no1);
    }
    Student∷~Student()
    {
        delete []name;
        delete []stu_no;
    }
    void Student∷modify(char *name1,char *stu_no1,float s1,float s2,float s3)
    {
        delete []name;
        name=new char[strlen(name1)+1];
        strcpy(name,name1);
        delete []stu_no;
        stu_no=new char[strlen(stu_no1)+1];
        strcpy(stu_no,stu_no1);
        score1.modify(s1,s2,s3);
    }
    void Student∷show()
    {
        cout<<"
     name: "<<name;
        cout<<"
     stu_no: "<<stu_no;
        score1.show();
    }
    void main()
    {
        Student stu1("Liming","990201",90,80,70);
        stu1.show();
        cout<<endl;
        stu1.modify("Zhanghao","990202",95,85,75);
        stu1.show();
    }
    
    name:Liming
    stu_no:990201
    Score computer: 90
    Score english: 80
    Score mathematics: 70
    name:Zhanghao
    stu_no:990202
    Score computer: 95
    Score english: 85
    Score mathematics: 75
    
  • 相关阅读:
    奇数
    简单的登录基于代码的
    偶数
    寻找特定的值
    'k1': 大于66的所有值, 'k2': 小于66的所有值
    差数和
    day1
    页面滑动监听
    jq的ajax初级使用
    在vue中引入swiper
  • 原文地址:https://www.cnblogs.com/whale90830/p/10542272.html
Copyright © 2011-2022 走看看