标签:
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; }
标签:
原文地址:http://www.cnblogs.com/moya-com/p/4823150.html