1、类和对象
(1)类的定义
class Dog//class为关键字,Dog为类名
{
char name[20];
int age;
int type;//数据成员,int为属性
void speak();
void run();//成员函数、方法
}
(2)访问限定符
public:公共的,希望暴露
protected:受保护的
private:私有的,希望隐藏
class Dog//class为关键字,Dog为类名
{
public:
char name[20];
int age;
int type;//数据成员,int为属性
void speak();
void run();//成员函数、方法
private:
狗蛋白质含量
}
2、对象实例化
(1)从栈实例化对象
class TV
{
public:
char name[20];
int type;
void changeVol();
void power();
}
int main(void)
{
TV tv;
TV tv[20];
return 0;
}
(2) 从堆实例化对象
int main(void)
{
TV *p=new TV();
TV*q=new TV[20];
//to do
delete p;
delete [ ]q;
return 0;
}
3、对象成员的访问方法
(1)int main (void)
{
TV tv;
tv.type=0;
tv.changeVol();
return 0;
}
(2)
int main (void)
{
TV *p=new TV();
p->type=0;
p->changeVol();
delete p;
p=NULL;
return 0;
}
(3)
int main (void)
{
TV *p=new TV[5];
for(int i=0;i<5;i++)
{
p[i]->type=0;
p[i]->changeVol();
}
delete [ ]p;
p=NULL;
return 0;
}
4、初始string
string s1; s1为空串
string s2("ABC"); 用字符串字面值初始化s2
string s3(s2); 将上初始化为s2的一个副本
string s4(n,'c'); 将s4初始化为字符‘c’的n个副本
(1)常用操作
s.empty( ) 若s为空串,则返回true,否则返回false
s.size( ) 返回s中字符个数
s[n] 返回s中位置为n的字符,位置从0开始
s1+s2 将两个串连接成新串,返回新生成的串
s1=s2 把s1的内容替换为 s2的副本
v1==v2 判定相等,相等返回true,否则返回false
v1!=v2 判定不等,不等返回true,否则返回false
5、数据封装
class Car
{
public:
int getWheelCount()
{return m_iWheelCount;}
private:
int m_iWheelCount; //只读属性,不能修改
}
6、类内定义与内联函数
(1)内联函数inline
类内定义:函数写在类里
(2)类外定义:同文件类外定义、分文件类外定义
分文件类外定义:在.h文件中定义类函数
在另一个.c文件中调用类中的函数,同时要#include".h"头文件
Car.h Car.cpp
class Car #include"Car.h"
{ void Car::run( )
public: { }
void run( ); void Car::stop( )
void stop( ); { }
void changeSpeed( ); void Car::changeSpeed( )
} { }
7、内存分区
栈区:int x=0;int *p=NILL;
堆区:int *p=new int [20];
全局区:存储全局变量及静态变量
常量区:string str="hello";
代码区:存储逻辑代码的二进制
8、对象初始化,构造函数
(1)构造函数规则和特点
构造函数在对象实例化时被自动调用
构造函数与类同名
构造函数没有返回值
可以有多个重载形式
实例化对象时仅用到一个构造函数
当用户没有定义构造函数时,编译器自动生成一个构造函数
(2)无参构造函数
(3)有参构造函数
(4)重载构造函数
9、初始化列表
class Student
{
public:
Student() {m_strName("Jim"),m_iAge(10); }
private:
int m_iWheelCount;
}
特性:
初始化列表先于构造函数执行
初始化列表只能用于构造函数
初始化列表可以同时初始化多个数据成员
10、拷贝构造函数
定义格式:类名(const 类名&变量名)
11、析构函数:~类名()不加任何参数
作用释放资源
class Student
{
public:
Student() {m_strName("Jim"),m_iAge(10); }
~Student() {delete [ ]m_strName; }
private:
int m_iWheelCount;
}
如果没有自定义的析构函数则系统自动生成
析构函数在对象销毁时自动调用
析构函数没有返回值,没有参数也不能重载
*申请内存——>初始化列表——>构造函数——>参与运算——>析构函数——>释放内存