cpp 结构体和类以及链表

本文介绍了C++中结构体和类的区别,强调了私有和公共成员的访问控制,展示了如何通过初始化函数和赋值操作实例化对象,以及如何使用链表和指针进行数据结构的实现。还涉及了不使用特定关键字的求和方法和内存地址的处理。
摘要由CSDN通过智能技术生成

结构体,类

对于私有类可以初始化private类,而对共有类public类可以通过初始化函数来限制访问私有类的功能。

#include<iostream>
#include<cstring>
using namespace std;
struct person{
    private:
        int age,height;
        double money;
        string book[100];
        
    public:
        string name;
        void say(){
            cout<<"I'm"<<age<<endl;
        }
        int set_age(int a){//改变age私有参数的值,可以直接传递实参
            age = a;
        }
        int get_age(){
            return age;
        }
        void add_money(double x){
            money += x;
        }
}person_a,person_b,persons[100];

结构体和类的作用是一样的。不同点在于类默认是private,结构体默认是public。

当赋值函数时可以简单处理:

 这里

#include<iostream>

using namespace std;
struct Person
{
    int age,height;
    double money;
    
    Person{}
    Person(int _age,int _height): age(_age),height(_height){}
    Person(int _age,int _height,double _money):age(_age),height(_height),money(_money){}
};

int main(){
    Person p = {18,180};
    cout<<p.money<<endl;
    return 0;
}

 另链表

#include<iostream>
using namespace std;
struct Node{
    int val;
    Node* next;
}*head;

int main(){
    for(int i = 1;i <= 5; i++){
        Node *p = new Node();
        p->val = i;
        p->next = head;//头插法建立链表
        head = p;
    }
    
    for(Node *p = head;p;p=p->next) cout<<p->val<<' ';
    cout<<endl;
    return 0;
}

建立链表,首先是对链表头节点进行初始化,即strut Node *head操作,(是头节点初始化还是链表初始化来着),然后再通过循环插入建立链表。

题目:

求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 (A?B:C)。

数据范围

1≤n≤50000

样例
输入:10

输出:55

 贴代码

class Solution {
public:
    int getSum(int n) {
        long long a=n;
        return (a*(a+1))>>1;
    }
};

这里通过位运算代替*2运算即满足题目要求不带乘法。

指针

指针指向变量,算作变量别名。

#include<iostream>
using namespace std;

char a,b;

int main(){
    int a = 10;
    int* p = &a;//这里是定义一个int*型变量用来保存a的地址
    
    cout<<*p<<endl;//输出为10;
    *p = 12;
    
    cout<<*p<<endl;//输出为12;
    cout<<a<<endl;//输出12;
    
    int c[10];
}

 注意对指针进行加法减法运算时,需要注意指针变量的增减,当指针类型为char*时,p+1,地址只会加一,而当指针为int*时,p+1,指针将会加四,因为int型占四个字节。

贴代码:

#include<iostream>
using namespace std;

int main(){
    char c;
    char a[5]={1,2,3,4,5};
    
    char *p = a;
    
    cout<<(void*)p<<endl;//输出0x7fff9628ec63
    cout<<(void*)p+1<<endl;//输出0x7fff9628ec64
    
    return 0;
}

另对输出地址操作和c++的引用操作需要: 

#include<iostream>

using namespace std;
char a,b;

int main(){
    char c;
    int a[5]={1,2,3,4,5};
    
    cout<<(void*)&c<<endl;//&c做强制类型转换,输出c的地址
    cout<<a<<endl;
}

//----------------------------------------------------------------//

#include<iostream>
using namespace std;
int main(){
    int a = 3;
    int* p = &a;//这是在c中用的指针。
    int& p = a;//这是在c++中常用的引用、别名。
    *p = 5;
}

 这里的int &p,a和p是指向同一个地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值