c++构造函数
5.封装
类的定义
关键字 class Dog{
属性--> char name[20]; <-- 数据成员
int age;
方法--> void speak(); <-- 成员函数
}
6.对象实例化
从栈实例化对象:
class TV{ int main(void){
public: Tv tv:
char name[29]; Tv tv[20];
int type; return 0;
}
void changeVol();
}
从堆中: int mian(void){
Tv *p = new Tv();
Tv *q = new Tv[20];
delete p; delete []q;
return 0;
}
7.对象成员的访问方法
栈: tv.type = 0;
tv.changeVol();
堆: Tv *p = new Tv(); Tv *p = new Tv[5];
p -> type = 0; for(int i = 0; i< 5;i++){}
p -> changeVol(); p[i] ->type = 0;
delete p; p[i] ->changeVol();
p = Null; delete []p;
return 0; p = NUll;
8.字符串初始化
sting s1; s1为空串 string s2("sss"); string s3(s2); sting s4(n,'c'); n个'c' 的字符串
s.empty();为空串返回true, s.size()返回字符的个数; s[n] 返回s中位置n的字符,从0开始
s1+s2 拼接 s1 = s2; s1内容替换为s2;
s1 == s2; 判断相等,返回true s1 != s2; 判定不等,返回true;
string s1 = "hello"; string s2("world"); string s3 = s1 +s2; string s4 = "he"+s2; string s5 = "wh"+s2+"sj";
错误:string s6 = "hello"+"world";
9.同文件类内定义:
class Car{
public :
void run();
void stop();
}
void Car::run(){}
分文件类外定义: Car.h 头文件
class Car{
public :
void run();
}
Car.cpp
#include "Car.h"
void Car::run(){}
10.内存分区:
栈区:int x = 0; int *p = Null;
堆区:int *p = new int[20];
全局区:存储全局变量以及静态变量
常量区:string str = "whll";
代码区:存储逻辑代码的二进制
11.对象的初始化:
class Tank{
private:
int m_X;
int m_Y;
public:
void init(){
m_x=0;m_Y = 0;
}
}
int main(void){
Tank t1; t1.init();
Tank t2; t2.init();
}
12.构造函数的规则和特点: 1>构造函数在对象实例化时被调用 2>构造函数与类同名 3>构造函数没有返回值 4>构造函数可以有多个重载形式
5>实例化对象时仅用到一个构造函数 6>当用户没有定义构造函数时,编译器自动生成一个构造函数
Teacher.cpp
#include"Teacher.h"
Teacher::Teacher(){
m.strName = "jj";
m_iAge = 4;
}
Teacher::Teacher(string name,int age){
m_strName = name;
m_iAge = age;
}
void setName(string name){
m_strName = name;
}
string Teacher::Teacher(){
return m_strName;
}
Teacher.h
class Teacher{
public:
Teacher();
Teacher(string name,int age);
void setName();
string getName();
private :
string m_strName;
int m_iAge;
}
13.初始化列表, 先于构造函数执行,只能用于构造函数,可以同时初始化多个数据成员,效率高
class Student{
public:
Studengt():m_strName("jj"),m_iAge(2);
private:
string m_strName;
int m_iAge;
};
错误: 正确:
class Circle{ class Circle{
public: public:
Circle(){m_Pi=3.14} Circle():m_Pi=3.14;
private: private:
const double m_Pi; const double m_Pi;
}
14,析构函数 ~类型()
没有自定义的析构函数则系统自动生成;析构函数在对象销毁是自动调用;析构函数没有返回值,没有参数不能重载;
15.对象声明历程
申请内存,初始化列表,构造函数,参与运算,析构函数,释放内存;
/**
* 定义类:Student
* 数据成员:m_strName
* 无参构造函数:Student()
* 有参构造函数:Student(string _name)
* 拷贝构造函数:Student(const Student& stu)
* 析构函数:~Student()
* 数据成员函数:setName(string _name)、getName()
*/
#include <iostream>
#include <string>
using namespace std;
class Student{
public:
Student(){
m_strName = "";
}
Student(string _name){
m_strName = _name;
}
Student(const Student& stu){};
~Student(){};
void setName(string);
string getName();
private:
string m_strName;
};
void Student::setName(string _name){
m_strName = _name;
}
string Student::getName(){
return m_strName;
}
int main(void)
{
// 通过new方式实例化对象*stu
Student *stu = new Student;
// 更改对象的数据成员为“慕课网”
stu->setName("慕课网");
// 打印对象的数据成员
cout << stu->getName() << endl;
delete stu;
stu = NULL;
return 0;
}