【C++】C++的面向对象一

本文深入探讨C++中类与对象的概念,包括类的定义、对象的创建方式及其存储位置,成员变量与成员函数的区别及定义方法,以及类成员的访问权限与封装原则。通过实例说明了构造函数的作用与调用方式。

一、类与对象。

1. 与结构体一样,类只是一种复杂类型的数据声明,不占用内存空间。而对象是这种数据类型的一个变量,所以占用内存空间。

一个类的定义示例。

class Student{
public:
    //成员变量
    char *name;
    int age;
    float score;
    //成员函数
    void say(){
        cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
    }
};

(这里与java不同,java是在外部加public 关键字,而C++是在内部,只能在内部声明)

2.我们平时创建的对象都是在栈里,这样的对象都有名字,比如sut(),使用指针指向他不是必须的。但是通过new创建的对象在队里,没有名字,只能通过一个指针指向它。否则以后就找不到这个对象了。

       栈内存是自动管理的,不能使用delete删除在栈上创建的对象;对内存由程序员管理,对象使用完毕后可以通过delete删除。在实际开发中,new和delete往往成对出现,以保证及时删除不再使用的对象,防止无用的内存堆积。

1.在栈里创建对象:
Student stu;
Student *pStu = &stu;
2.在堆里创建对象:
Student *pStu = new Student;

二、成员变量和成员函数。

      与java的成员函数必须在类内定义不同的是,C++的成员函数可以在类内定义,也可以现在类内声明,然后在类外定义。区别在于,在类内定义的成员函数自动解析为内联函数。而类外定义的成员函数则不是内联函数。

一般用非内联函数的形式定义。

1.成员函数作为内联函数定义法:
class Student{
public:
    //成员变量
    char *name;
    int age;
    float score;
    //成员函数
    void say(){
        cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
    }
};
2.成员函数不是内联函数的定义法:

class Student{
public:
    //成员变量
    char *name;
    int age;
    float score;
    //成员函数
    void say();  //函数声明
};
//函数定义
void Student::say(){
    cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
}

三、类成员的访问权限以及类的封装。

注意:C++中,只有成员变量和成员函数由公有私有之分,类本身没有公有私有之分。这点于java不同。

1.C++的成员变量大都以m_开头,便于于成员函数的形参名字区分开。

private和protected修饰的属性的成员在类外无法访问,只有pubilc修饰的成员在类外可访问。不写时默认为iprivate.

C++ 的构造函数位于类外。

#include <iostream>
using namespace std;
class Student{
private:
    char *m_name;
    int m_age;
    float m_score;
public:
    //声明构造函数
    Student(char *name, int age, float score);
    //声明普通成员函数
    void show();
};
//定义构造函数
Student::Student(char *name, int age, float score){
    m_name = name;
    m_age = age;
    m_score = score;
}
//定义普通成员函数
void Student::show(){
    cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
}
int main(){
    //创建对象时向构造函数传参
    Student stu("小明", 15, 92.5f);
    stu.show();
    //创建对象时向构造函数传参
    Student *pstu = new Student("李华", 16, 96);
    pstu -> show();
    return 0;
}

在栈上创建对象时,实参位于对象名后面,例如Student stu("小明", 15, 92.5f)

在堆上创建对象时,实参位于类名后面,例如new Student("李华", 16, 96)

一旦定义了构造函数,那么创建对象时就一定要调用,不调用是错误的。如果由多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值