c++简略笔记

什么是类,什么是对象

class student{
string name;
int age;
}

student aa; //创建一个student类对象
aa.age=20;

**成员函数的重载:**不同函数的函数名可以相同,通过不同的输入参数来识别它们

class student{
public:
string name;
int age;
bool set(int a);
bool set(string a);
}

aa.set(10); 给age赋值10
aa.set(“张三”); 给name赋值”张三”

**构造函数 :**本质即对象初始化

构造函数的名字必须和类的名字一样

class student{
public:
string name;
int age;
student();
student(int a , string b);
}

student::student(int a, string b){
age = a;
name = b;
}

student aa; 调用无参数的构造函数
student bb (10, “张三”);

析构函数: 释放对象所占用的内存

这里插入一个高级的创建对象并删除对象的方法:
student *p = new student(10, “张三”);
delete p;

构造函数的写法:
student:: ~ student
{cout<<”delete object”}

常成员函数 const : 只读不写

class student{
public:
string name;
int age;
bool set(int a);
bool read() const; 后面加了const,表示只读不写
}

bool student::read() const{
cout<<name;
cout<<age;
return true;
}

student aa;
aa.read;

静态成员static 与对象无关的数据,调用静态成员数据的方法叫静态成员函数

class student{
public:
string name;
int age;
student();
static int cnt;
static int count();
};

student:: student(){
age=20;
name=”张三”;
cnt=cnt+1;
}

int student::count(){
return cnt;
}

student aa;
student bb;
aa.count(); 由于count()和对象没关系,所以aa.count()和bb.count()都返回2,因为创建了两个对象
bb.count();
student::count(); 和aa.count()的效果一样

public和private 只能通过共有的方法调用私有的方法

class student{
public:
void printf_age_public();
private:
void printf_age_private();
}

void student:: printf_age_public()
{ printf_age_private();}

void student:: printf_age_private()
{cout<<20;}

student aa;
aa. printf_age_public(); 通过公有函数调用私有函数
aa. printf_age_private(); 这里出错,不允许直接调用私有方法

正规程序类的定义 “属性”放在private里,“方法”放在public中

class student{
public:
bool set(int a);
bool set(string b);
bool read() const;
student();
student(int a, string b);
private:
int age;
string name;
}

类的派生继承

sudent类派生出undergraduate类:

class undergraduate: public student
{
public:
string course;
}

子类自动继承父类的属性和方法,包括构造函数和析构函数

undergraduate bb; bb对象已经有age和name的初值,从父类student继承来的
bb.set(25);

不同类别的继承

公有继承:
父类student, public内容A,private内容B, 子类公有继承,则只有内容A,且在public
父类student, public内容A,protect内容B, 子类公有继承,则子类有public内容A和protect内容B

私有继承:
父类student, public内容A,private内容B,子类私有继承,则子类只有内容A,且为private

保护继承
父类student, public内容A,protect内容B, 子类保护继承,则子类有内容A和B,且都为protect

子类的构造函数
不管子类有没有构造函数,创建子类对象时,父类构造函数都将被调用。

class undergraduate: public student
{
public:
string course;
undergraduate();
undergraduate(int a, string b, string c);
}

undergraduate::undergraduate()
{
course = “physics”;
}

undergraduate::undergraduate(int a, string b, string c): student(a,b)
{
course = c;
}

undergraduate bb; 父类和子类无参数构造函数都将被调用

undergraduate bb(20, “张三”, “physics”);

多态 不同类的对象可以运用相同的方法,“相同”指的是方法名字相同,但内容不相同

c++实现多态的方法:重载、隐藏、覆盖

重载:重载两个函数的参数格式必须是不一样的,隐藏和覆盖可以

隐藏:
class student{
public:
void study(bool a){cout<<”好好学习”};
}

class undergraduate: public student{
public:
void study(int a){cout<<”好好学习”};
}

student aa;
undergraduate bb;
aa.study(true);
bb.study(5);
bb.study(true); 出错,父类方法被隐藏了,系统找不到对应的方法

类指针 不考虑继承,和结构体指针相同

student *p;
student aa;
p = &aa;
p -> name; 和aa.name一样
p ->age; 和aa.age一样
p ->study(); 和aa.study()一样

更高级的写法:
student *p = student(20, “张三”);
delete p;

父类指针可以指向子类对象,但不能调用子类的属性和方法

student *p1;
undergraduate *p2;
student aa;
undergraduate bb;
p1 = &aa;
p2 = &bb;
p1 = &bb;
p2 = &aa; 这里出错,子类指针不能指向父类对象

真正的多态与虚函数

class student{
public:
virtual void study();
}

void student::study()
{cout<<”好好学习”}

class postgraduate: public student{
public:
virtual void study();
}

void postgraduate::study()
{cout<<”芯片设计”;}

class undergraduate:public student{
public:
virtual void study();
}

void undergraduate::study()
{cout<<”大学物理”;}

student aa;
postgraduate bb;
undergraduate cc;
student *p;
p = &aa;
p ->study();
p = &bb;
p ->study();
p = &cc;
p ->study();

c++多态的核心:在开始时设置一个父类指针,之后指针可以动态地指向不同的类,并调用不同类的方法

纯虚函数和抽象类

学生类不应该有自己的对象,于是学生类被叫做抽象类

class student{
public:
student();
student(int a, string b);
virtual void study() = 0; 表明这是纯虚函数
}

student aa; 报错
student *p;
undergraduate bb;
p = &bb;
p ->study(); 通过多态调用子类的study方法

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值