main.cpp
#include <iostream>
#include <string>
#include "student.h"
using namespace std;
/*
内存分区:(按照用途划分)
栈区:int x = 0;int *p = NULL;即定义变量存储在栈区,
内存由系统进行控制,无论是分配还是回收都不需要程序员来关心
堆区:int *p = new int[20];即new运算符分配出的内存就存储在堆区
未来必须使用delete进行回收,是需要程序员自己去操心管理的
全局区:存储全局变量及静态变量
常量区:string str = "hello";存储一些字符串和常量
代码区:存储逻辑代码的二进制
类被实例化之前是不会占用堆或者栈中内存的
实例化后每个对象都会在栈上或者堆上开辟出一段内存用来存储各自的数据,不同的变量占据着不同的内存
逻辑代码只编译一份放在代码区,当需要的时候这个代码区的代码供所有的对象进行使用,谁需要它就去调用它,找到相应的代码入口
*/
/*
对象初始化:
为了避免:
1.忘记调用初始化函数
2.重复调用初始化函数
构造函数的规则和特点:
1.构造函数在对象实例化的时被自动调用
2.构造函数与类同名
3.构造函数没有返回值(连void这样的返回类型都不用写)
4.构造函数可以由多个重载形式
5.实例化对象时仅用到一个构造函数
6.当用户没有定义构造函数时,编译器自动生成一个构造函数,这个构造函数当中没有做任何事情
7.参数可以有默认值,但是构造函数的默认值不能随意给
Teacher();
Teacher(string name = "Jane", int age = 30);
Teacher t1;如果这样实例化对象,计算机就无法判断要调用哪一个构造函数,从而计算机就无法正确的编译,编译不能通过
无参构造函数
class Student
{
public:
Student(){m_strName = "Jane";}
private:
string m_strName;
}
有参的构造函数
class Student
{
pulic:
Student(string name) //用户实例化Student的对象的时候可以传进来一个name
{m_strName = name;}
private:
string m_strName;
}
重载构造函数:只需要遵循重载的规则就可以了:参数个数、类型、调用顺序
class Student
{
public:
Student(){m_strName = "Jane";}
String(string name)
{m_strName = name;}
private:
string m_strName;
}
*/
int main()
{
student s1;
student s2("Sheryl", "female", 23);
student s3("Mark");
cout << s1.getName() << "," << s1.getGender() << "," << s1.getAge() << endl;
cout << s2.getName() << "," << s2.getGender() << "," << s2.getAge() << endl;
cout << s3.getName() << "," << s3.getGender() << "," << s3.getAge() << endl;
system("pause");
return 0;
}
student.h
#include <string>
using namespace std;
class student
{
public:
student();
student(string _name, string _gender = "male", int _age = 20);
void setName(string _name);
string getName();
void setGender(string _gender);
string getGender();
void setAge(int _age);
int getAge();
void iniScore();
int getScore();
void study(int _score);
private:
string m_strName;
string m_strGender;
int m_iAge;
int m_iScore;
};
student.cpp
#include "student.h"
#include <string>
#include <iostream>
using namespace std;
student::student()
{
m_strName = "Jane";
m_strGender = "female";
m_iAge = 15;
cout << "student" << endl;
}
student::student(string _name, string _gender, int _age)
{
m_strName = _name;
m_strGender = _gender;
m_iAge = _age;
cout << "student(_,_,_)" << endl;
}
void student::setName(string _name)
{
m_strName = _name;
}
string student::getName()
{
return m_strName;
}
void student::setGender(string _gender)
{
m_strGender = _gender;
}
string student::getGender()
{
return m_strGender;
}
void student::setAge(int _age)
{
m_iAge = _age;
}
int student::getAge()
{
return m_iAge;
}
void student::iniScore()
{
m_iScore = 0;
}
int student::getScore()
{
return m_iScore;
}
void student::study(int _score)
{
m_iScore += _score;
}