#内联函数,重载函数,缺省函数 1.为了提高效率,可以在函数定义时候前面加上inline即可以将函数改为内涵函数 2.重载函数,函数名字可以相同,在调用的时候保证没有二义性即可 3.声明函数的时候就可以位函数的形参赋值,这样的函数叫做缺省函数
#c++类和对象的基本概念 类成员的可访问范围(在类的定义中) *private* :私有成员,只能在成员函数内访问 >私有成员的特点,只能在类里面访问(主函数中试图访问是错误的),目的是强制对成员变量的访问一定要通过成员函数进行, 那么以后成员变量的类型等属性修改后,只需要更改成员函数即可。否则,所以直接访问成员变量的语句 都需要修改 *public*: 公有成员,可以在任何地方访问 *protected*:保护成员 (如果某个成员前面没有关键字,则缺省被认为是私有成员)
#构造函数 1.名字与类名相同,可以有参数,不能有返回值 2.作用是对对象进行初始化,如给成员变量赋值 3.如给定义类时没有写构造函数,则编译器会生成一个默认的无参数的构造函数 4.*对象生成的时候构造函数自动被调用。对象一旦生成,再也不能在其上执行构造函数 5.一个类可以有多个构造函数
#赋值构造函数 1.只有一个参数,即对同类对象的引用 2.x::x(const x&)*关于const,如果希望确保实参的值在函数中不应被改变,则可以加上关键字const 3.如给没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制构造函数完成复制功能 **赋值构造函数**起作用的三种情况 1.当用一个对象去初始化同类的另一个对象 2.如果某函数有一个参数是类a的对象,那么该函数被调用时,类a的复制构造函数将被调用 3.如果函数的返回值是类a的对象时,则函数返回时,a的复制构造函数将被调用 注意:当对象赋值并不导致复制构造函数被调用
#类型转换构造函数 1.目的是实现类型的自动转换 2.只有一个参数,并且不是复制构造函数的构造函数,一般就可以看作是转换构造函数 3.当需要的时候,编译系统会自动调用转换构造函数,建立一个无名的临时对象
#析构函数 1.名字与类名相同,在前面加~,没有参数和返回值,一个类最多只有一个析构函数 2.析构函数对象消亡时即自动被调用,可以定义析构函数来在对象消亡前做善后工作,比如释放分配的空间 3.如果定义类时没有写析构函数,则编译器会生成缺省的析构函数,缺省析构函数什么也不做 4.如果定义了析构函数,则编译器不在生成缺省析构函数
#include<iostream>
using namespace std;
class crectangle{
public:
int w,h;//成员变量
int area(){
return w*h;//求面积的成员函数
}
int perimeter(){
return 2*(w+h);//求周长的成员函数
}
void init(int w_,int h_){ //初始化函数
w=w_;h=h_;
}
crectangle(int w_,int h_){//构造函数
w=w_;h=h_;
}
crectangle(){ //也是一个构造函数,重载构造函数,目的当声明对象不带参数时候,编译器自动调用它
cout<<"1"<<endl;
}
crectangle(const crectangle &r){ //复制构造函数
w=r.w;h=r.h;
cout<<"copy constructor called"<<endl;
}
};//一个关于矩形的对象定义完成
int main(){
int w,h;
cin>>w>>h;
crectangle r(w,h);//r是一个对象
r.init(w,h);//调用初始化函数对其进行初始化
cout<<r.area()<<endl<<r.perimeter();
// return 0;
cout<<endl;
//通过类,可以定义变量。对象的内存的分配:和结构变量一样
//对象占用的内存空间的大小等于所以成员变量的大小之和
//访问对面的成员名,1 直接使用.访问
//2. 用class类名声明一个指针,crectangle *p= &r p->w 可以直接访问
//3. 引用访问 crectangle &rr=r rr.w就可以直接访问
crectangle r2;
crectangle r3[2]={{3,4}};
crectangle r4(r2);//调用复制构造函数 ,r4对象是r2的一个复制品
}
//类的成员函数可以放到外面来写
//例如 int crectangle::rear(){...}
#include<iostream>
using namespace std;
//构造函数和析构函数的应用实例
class demo{
int id;//私有成员
public:
demo(int i){ //类型转换构造函数
id=i;
cout<<"id="<<id<<"构造函数"<<endl;
}
~demo(){//析构函数
cout<<"id="<<id<<"析构函数"<<endl;
}
};
demo d1(1);//全局变量声明了d1对象
void fun(){
static demo d2(2);//静态局部变量(在函数结束时候,变量不消亡)
demo d3(3);
cout<<"func"<<endl;
}
int main(){
demo d4(4);
d4=6;
cout<<"main"<<endl;
{
demo d5(5);//这是一个局部变量, 大括号结束,局部变量消亡
}
fun();
cout<<"main ends"<<endl;
return 0;
}
废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:类和对象的基础