C++4

类和对象

1,类的定义

class CTest

{

private:

int private_data;

void private_method()

{

cout<<endl;

}

protected:

int protectd_data;

void protected_method()

{

cout<<endl;

}

public:

int public_data;

void public_method()

{

cout<<endl;

}

void Init()

{

private_data=0;

protectd_data=1;

publicdata=2;

}

};

void main90

{

cTest c;

c.Init();

};

在类的外部不能访问类的私有成员和保护成员;

在类的外部定义成员函数

void Cs::PrintInfo()

{

cout<<endl;

};

对象定义和访问

Cs s1;

si.Printlion();

4,this指针

void CStudent::SetID(int id)

{

this->id=id;

}

5构造函数

class a

{

private:

int id;

char name[20];

float fScore;

public:

a();//构造函数

a(int id,char name,float fScore);//重载构造函数

~a();//析造函数

void printInfo();

}

不声明构造函数,自动定义缺省构造函数才,析造函数是最早构造函数它最后出,一个类只有一个析造函数。拷贝构造函数要在类中声明拷贝构造函数

CStudent(Cstudent &s);

CStudent(Cstudent &s)

{id=s.id;

}

7对象和指针

void main()

{

CStudent s;

CStudent *ps;

ps=&s;

ps->SteINft(1,"asa",92);

}

8常对象和常成员

常对象不能被改变,因此必须在定义是进行初始化

类名 const 对象名

const  类名 对象名

const A  a(1,2);

常成员

类型 函数名(形参) const;

可以读取数据成员的值,但不能改变不能调用没const的成员

1,静态数据成员static 是对象共享的数据成员,静态成员函数不为谋一对性服务,是共享的

2.友元是以个外部函数

class p

{private:

int x,y;

public:

P(int x,int y)

{

this->x=x;this->y=y;

}

friend double dist (p&p1,P  &p2);

}

double dist(p &p1,p &p2)

{

return sqrt (double (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))

}

运算符重载关键字operator

a a::operator+(a&c)

{

a temp;

temp.x=x+c.x;

temp.y=y+c.y;

}

 

#include <iostream> 
using namespace std; 
 
class Base 

    public://公有的 
        int a1; 
        virtual void test() = 0; 
    protected://受保护的 
        int a2; 
    private://私有的 
        int a3; 
}; 
//------------------------------------------------------------------------------ 
class ProtectedClass:protected Base//保护继承 

    public: 
        void test() 
        { 
            a1 = 1;//a1在这里被转变为protected 
            a2 = 2;//a2在这里被转变为protected 
            a3=3;//错误,派生类不能访问基类的私有成员 
        } 
};
class privateClass:private Base//保护继承 

    public: 
        void test() 
        { 
            a1 = 1;//a1在这里被转变为private
            a2 = 2;//a2在这里被转变为private 
            a3=3;//错误,派生类不能访问基类的私有成员 
        } 
};
派生类不能访问基类的私有成员
公有继承是把基类的保护的成员和公有成员继承,不能继承私有成员;
保护继承是把基类的保护的成员和公有成员变为保护成员,不能继承私有成员;
私有继承是把基类的保护的成员和公有成员变为私有成员,不能继承私有成员;

多重继承

class A:public B,protected C

{
}

继承

class A:public B

{

ptotected:

double r;

public:

A(int x=0;int y=1;int double rr=3):B(x,y)

{r=rr;}

3继承

class A

{private:

int x;

public:

A(int i)

{x=i;}

~A(){};

}

class B:

{private :

int y;

A h;

public:

B(int yy;int i):A(i)

{ yy=y;}

}

虚基类关键字virtual,保存一份共同基类副本

class A

{}

class B:virtual public A

{}

class C:virtual public A

{}

class D:public B,public C

{}

3动态联编

虚函数是C++中用于实现多态(polymorphism)的机制,引用继承他的函数


class A
{
public:
virtual void foo() { cout << "A::foo() is called" << endl;}
};

class B: public A
{
public:
virtual void foo() { cout << "B::foo() is called" << endl;}
};


  那么,在使用的时候,我们可以:

A * a = new B();
a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!

静态联编是在程序编译时系统就能决定调用哪个函数,如函数重载就是静态编译称早期联编。

虚折构函数,在基类中放指针申请内存空间;

 

如下声明表示一个函数为纯虚函数:

class A
{
public:
virtual void foo()=0; // =0标志一个虚函数为纯虚函数
};


  一个函数声明为纯虚后,纯虚函数的意思是:我是一个抽象类!不要把我实例化!纯虚函数用来规范派生类的行为,实际上就是所谓的“接口”。它告诉使用者,我的派生类都会有这个函数。

2.3 虚析构函数
  析构函数也可以是虚的,甚至是纯虚的。例如:

class A
{
public:
virtual ~A()=0; // 纯虚析构函数
};

抽象类是有一个或多个纯虚析构函数,没有纯虚析构函数事具体类;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值