码迷,mamicode.com
首页 > 其他好文 > 详细

类和对象(2)

时间:2015-09-20 13:07:11      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

1.面向对象程序设计(OOP)是一种新的程序设计范例。其基本思想是使用对象、类、继承、封装、聚合、关联、消息和多态性等基本概念来进行程序设计。

c++中的多态性包括静态多态性和动态多态性。静态多态性是在编译的时候就能决定调用哪个函数,比如函数重载、分局参数的不同,执行不同操作。动态多态性是由继承产生的,相关的但不同的类对象对同一消息会做出不同的响应,c++中通过虚函数来实现动态多态性。

消息是一个对象向另一个对象发出的服务请求,进行对象之间的通信。通常消息是由接受消息的对象、消息名称和若干消息参数三部分组成。

2.类是对象的抽象,对象是类的具体实例。

类中定义了两部分:数据成员和成员函数。

注意:定义一个类时,使用关键字class,C++中习惯使用C或T开头 的变量名。

类定义结束位置要用  ;   符号。

在类声明中,三种访问限定符(public、protected、private)可以按任意次序出现。

如果类的成员是私有的访问权限,则成员的访问限定符private可以省略,即默认的访问权限是private。习惯上将公有类型放在最前面。

公有成员可以被类中的成员使用和访问,还可以被类外部的其他函数使用。

私有成员是封装在类内部的,只能被该类的成员该类的友元函数或友元类访问。

保护的成员可以被类的成员访问,该类的继承也可以访问。

一旦定义了类的对象,急需要给类分配内存空间。

c++用this指针来区分是哪个对象的成员函数。

类内定义的成员函数默认的是内联函数(inline函数)。在类内定义的函数c++会自动将它们作为内联函数来处理。

通常,c++程序员习惯在类体中定义数据成员以及成员函数的声明,而将成员函数的实现卸载类外。

成员函数在类外定义时,必须在函数名前面加上类名,符号“::”是作用域限定符或作用域运算符。如下:

class Cdate     //类的声明只是定义了一种新的数据类型,不分配任何内存空间。
{
public:
    void Setdate(int y,int m,int d);
    int Isleapyear();
    void DisplayDate();
private:
    int year,month,day;
};
void Cdate::Setdate(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
}
int Cdate::Isleapyear()
{
    return (year%4==0&&year%100!=0)||(year%400==0);
}
void Cdate::DisplayDate()
{
    cout<<year<<"-"<<month<<"-"<<day<<endl;
}

 

如果需要将类外定义的成员函数说明为内联函数,需要显式在最前面加上关键字“inline”。

3.对象成员的引用

一、通过对象名和成员运算符访问。如:对象名.数据成员名

二、通过指向对象的指针和指针运算符访问。如:对象指针变量名->数据成员名

Cdate d,*p;
p=&d;
p=>DisplayDate();

三、通过对象的引用变量访问对象中的成员。

Cdate d1;
Cdate &d2=d1;
d2.DisplayDate();

 

#include<iostream.h>
#include<string.h>
class CStudent
{
public:
    void setinfo(char*,int ,char ,int );
    void setgrad(float,float,float);
    float avg();
    void display();
private:
    char name[20];
    int id;
    char sex;
    int age;
    float grad[3];
};
void CStudent::setinfo(char *na,int i,char s,int a)
{
    strcpy(name,na);
    id=i;
    sex=s;
    age=a;
}
void CStudent::setgrad(float a,float b,float c)
{
    grad[0]=a;
    grad[1]=b;
    grad[2]=c;
}
float CStudent::avg()
{
    return (grad[0]+grad[1]+grad[2])/3;
}
void CStudent::display()
{
    cout<<"id:"<<id<<endl;
    cout<<"name:"<<name<<endl;
    cout<<"sex:"<<sex<<endl;
    cout<<"age:"<<age<<endl;
}
int main()
{
    CStudent stud1;
    stud1.setinfo("张三",2006102,m,18);
    stud1.setgrad(79,98,87);
    stud1.display();
    cout<<"平均成绩:"<<stud1.avg();
    return 0;
}

 

4.构造函数的作用是在创建对象时,系统自动调用它来初始化数据成员;

析构函数的作用是在对象生存期结束时自动调用来释放该对象。

构造函数的函数名和类名相同。

构造函数的访问属性应该是公有的。

构造函数一般不做初始化以外的事。

构造函数可以在类内定义,也可以在类外定义。

构造函数无返回类型,注意什么也不写,也不可写成void。

当程序运行时,当新对象被创建时,构造函数自动被调用。

构造函数可以重载。

#include<iostream.h>
class Cdate
{
public:
    Cdate()              //构造函数
    {
        year=2000;
        month=1;
        day=1;
    }
    Cdate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    void Setdate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    void DiaplayDate()
    {
        cout<<year<<"-"<<month<<"-"<<day<<endl;
    }
private:
    int year,month,day;
};
int main()
{
    Cdate d1;
    d1.DiaplayDate();
    Cdate d2(2001,4,1);
    d2.DiaplayDate();
    return 0;
}

 

类和对象(2)

标签:

原文地址:http://www.cnblogs.com/moya-com/p/4823150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!